Понимание 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 ответ
Вы можете изучить две статьи, описывающие этот пример.
Во-первых, вот высокий уровень. Есть две внешние петли. Первый отвечает за очистку буфера curl прямо сейчас. Второй отвечает за ожидание дополнительной информации, а затем за получение этой информации. Это пример того, что называется блокирующим вводом / выводом. Мы блокируем выполнение остальной части программы до завершения сетевого ввода-вывода. Хотя в целом это не самый предпочтительный способ управления сетевым вводом-выводом, на самом деле это наш единственный выбор в однопоточном, синхронном PHP.
Правильно делать curl_multi_exec
Сначала переменная $mrc и из руководства мы узнаем, что ответом является код cURL, определенный в предопределенных константах cURL. В сущности, это обычный ответ, и, как и с любой другой функцией PHP, curl_multi_exec ничем не отличается и возвращает ответ только после его завершения. Что означает, что должен быть только ОДИН ответ. В идеальном мире этот единственный ответ равен 0 (нулю) или равен предопределенной константе CURLM_OK.