Понимание php curl_multi_exec

Я пытаюсь понять curl_multi_exec. Я скопировал часть ручного примера здесь. Вот мне и интересно, как это работает? Первый цикл отправляет запрос http, я думаю? Но за этим следует цикл внутри цикла с использованием функций с, казалось бы, недокументированными флагами.

Я хотел бы скачать +=70 URL + параллельно.

http://www.php.net/manual/en/function.curl-multi-exec.php

<?php
...
$active = null;
//execute the handles
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}
...
?>

1 ответ

Решение

Вы можете изучить две статьи, описывающие этот пример.

PHP и curl_multi_exec

Во-первых, вот высокий уровень. Есть две внешние петли. Первый отвечает за очистку буфера curl прямо сейчас. Второй отвечает за ожидание дополнительной информации, а затем за получение этой информации. Это пример того, что называется блокирующим вводом / выводом. Мы блокируем выполнение остальной части программы до завершения сетевого ввода-вывода. Хотя в целом это не самый предпочтительный способ управления сетевым вводом-выводом, на самом деле это наш единственный выбор в однопоточном, синхронном PHP.

Правильно делать curl_multi_exec

Сначала переменная $mrc и из руководства мы узнаем, что ответом является код cURL, определенный в предопределенных константах cURL. В сущности, это обычный ответ, и, как и с любой другой функцией PHP, curl_multi_exec ничем не отличается и возвращает ответ только после его завершения. Что означает, что должен быть только ОДИН ответ. В идеальном мире этот единственный ответ равен 0 (нулю) или равен предопределенной константе CURLM_OK.

Другие вопросы по тегам