Подтвердить что ты не робот

Понимание 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);
    }
}
...
?>
4b9b3361

Ответ 1

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

PHP и curl_multi_exec

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

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

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