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