За последние 24 часа нас посетили 15740 программистов и 1666 роботов. Сейчас ищут 835 программистов ...

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

Тема в разделе "Прочие вопросы по PHP", создана пользователем godmod, 25 авг 2014.

  1. godmod

    godmod Новичок

    С нами с:
    25 авг 2014
    Сообщения:
    1
    Симпатии:
    0
    Чуть допиленный пример с php.net почему-то отказывается работать, вместо ожидаемых 30 скачиваний страницы, получаю от 5 до 20. Пробовал выставлять таймауты соединений - безрезультатно.
    Код (Text):
    1. $cmh   = curl_multi_init();
    2. $tasks = array();
    3.  
    4. for ($i = 0; $i < 30; $i++) {
    5.    
    6.     $ch = curl_init('http://ya.ru');
    7.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    8.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    9.     curl_setopt($ch, CURLOPT_HEADER, 1);
    10.    
    11.     $tasks[$i] = $ch;
    12.    
    13.     curl_multi_add_handle($cmh, $ch);
    14. }
    15.  
    16. $active = null;
    17. $result = array();
    18. do {
    19.     $mrc = curl_multi_exec($cmh, $active);
    20.     var_dump($active);
    21.    
    22. } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    23.  
    24. while ($active && ($mrc == CURLM_OK)) {
    25.     if (curl_multi_select($cmh) == -1) {
    26.         usleep(100);
    27.     }
    28.    
    29.     do {
    30.         $mrc = curl_multi_exec($cmh, $active);
    31.        
    32.         $info = curl_multi_info_read($cmh);
    33.        
    34.         if ($info['msg'] == CURLMSG_DONE) {
    35.             $ch                  = $info['handle'];
    36.             $url                 = array_search($ch, $tasks);
    37.             $result[intval($ch)] = curl_multi_getcontent($ch);
    38.            
    39.             echo ($result[intval($ch)]) . '<br/>';
    40.            
    41.             curl_multi_remove_handle($cmh, $ch);
    42.             curl_close($ch);
    43.         }
    44.     } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    45.    
    46. }
    47. curl_multi_close($cmh);
    Пробовал вместо $mrc == CURLM_CALL_MULTI_PERFORM писать $active > 0 - тоже не помогло. Что я упускаю из виду?