Блокирует выполнение скрипта до тех пор, пока дескриптор cURL, прикрепленный к мульти-дескриптору cURL, не сможет выполнить работу. при следующем вызове Curl_multi_exec() или до истечения тайм-аута (в зависимости от того, что наступит раньше).
Я не до конца понимаю, как работает эта функция и почему это не так блокировать выполнение кода до тех пор, пока не будет выполнен один запрос. Он блокирует выполнение, но не полностью...
Вот мой код:
Код: Выделить всё
$urls = [
'https://google.com',
];
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch);
}
$timeout = 5;
$loop = 0;
$unfinishedHandles = 0;
do {
$loop++;
$status = curl_multi_exec($mh, $unfinishedHandles);
if ($unfinishedHandles > 0) {
curl_multi_select($mh, $timeout);
}
while (($info = curl_multi_info_read($mh)) !== false) {
if ($info['msg'] === CURLMSG_DONE) {
$handle = $info['handle'];
curl_multi_remove_handle($mh, $info['handle']);
if ($info['result'] === CURLE_OK) {
$chInfo = curl_getinfo($info['handle']);
echo "Request to {$chInfo['url']} completed", PHP_EOL;
}
}
}
} while ($unfinishedHandles);
curl_multi_close($mh);
echo 'Iterations: ', $loop, PHP_EOL;
Код: Выделить всё
Request to https://google.com/ completed
Iterations: 15
Если я прокомментирую вызов curl_multi_select, будет 125779 итераций. Если я уменьшу $timeout, я также получу больше итераций. Это понятно. Значит функция работает, но почему 15-20? Я не могу понять...
Подробнее здесь: https://stackoverflow.com/questions/791 ... despite-cu
Мобильная версия