@MilkyWay

Почему multi_curl выполняется меньше указанного количества раз?

Чуть допиленный пример с php.net почему-то отказывается работать, вместо ожидаемых 30 скачиваний страницы, получаю от 5 до 20. Пробовал выставлять таймауты соединений - безрезультатно.
$cmh   = curl_multi_init();
$tasks = array();

for ($i = 0; $i < 30; $i++) {
    
    $ch = curl_init('http://ya.ru');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    
    $tasks[$i] = $ch;
    
    curl_multi_add_handle($cmh, $ch);
}

$active = null;
$result = array();
do {
    $mrc = curl_multi_exec($cmh, $active);
    var_dump($active);
    
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && ($mrc == CURLM_OK)) {
    if (curl_multi_select($cmh) == -1) {
        usleep(100); 
    }
    
    do {
        $mrc = curl_multi_exec($cmh, $active);
        
        $info = curl_multi_info_read($cmh);
        
        if ($info['msg'] == CURLMSG_DONE) {
            $ch                  = $info['handle'];
            $url                 = array_search($ch, $tasks);
            $result[intval($ch)] = curl_multi_getcontent($ch);
            
            echo ($result[intval($ch)]) . '<br/>';
            
            curl_multi_remove_handle($cmh, $ch);
            curl_close($ch);
        }
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    
}
curl_multi_close($cmh);
  • Вопрос задан
  • 2306 просмотров
Пригласить эксперта
Ответы на вопрос 1
ilyaplot
@ilyaplot
PHP программист
Количество итераций может быть уменьшено, если curl_multi_exec вернет что то, отличное от ожидаемого.
Почитайте про возвращаемые значения. php.net/manual/ru/function.curl-multi-exec.php#ref...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы