За последние 24 часа нас посетили 18794 программиста и 1607 роботов. Сейчас ищут 978 программистов ...

curl mulri

Тема в разделе "PHP для новичков", создана пользователем tesla, 27 дек 2016.

  1. tesla

    tesla Активный пользователь

    С нами с:
    29 фев 2016
    Сообщения:
    34
    Симпатии:
    1
    Есть функция которая по списку url используя curl_multi_exec проверяет ответ от сервера и возвращает мне, на локалхосте работало раньше, сейчас при переносе на хостинг не работает - curl_multi_select в 26 строке постоянно возвращает -1 и не выходит из цикла. Подскажите пожалуйста, что может быть не правильно?

    P.S. На сервере проверил в запрещенных функциях в настройках пхп curl multi нет. Одиночная проверка работает

    Вот код:

    PHP:
    1. public function isDomainsListAvailable($urls){
    2.         $multi_init = curl_multi_init();
    3.  
    4.         $job = array();
    5.  
    6.         foreach ($urls as $url) {
    7.            // тут получаю конкретный урл
    8.             $curl = curl_init($url->connection_name);
    9.             curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    10.             curl_setopt($curl, CURLOPT_HEADER, true);
    11.             curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
    12.             curl_setopt($curl, CURLOPT_TIMEOUT, 5);
    13.             curl_multi_add_handle($multi_init, $curl);
    14.         }
    15.  
    16.         $thread = null;
    17.  
    18.         do {
    19.             $thread_exec = curl_multi_exec($multi_init, $thread);
    20.         }
    21.  
    22.         while ($thread_exec == CURLM_CALL_MULTI_PERFORM);
    23.  
    24.         while ($thread && ($thread_exec == CURLM_OK)) {
    25.             // а вот тут получаю постоянно -1, как следствие - бесконечный цикл..
    26.             if (curl_multi_select($multi_init) != -1) {
    27.                 do {
    28.                     $thread_exec = curl_multi_exec($multi_init, $thread);
    29.                     $info = curl_multi_info_read($multi_init);
    30.  
    31.                     if ($info['msg'] == CURLMSG_DONE) {
    32.                         $init = $info['handle'];
    33.                         $page = array_search($init, $job);
    34.                         // пишу необходимую инфу в массив
    35.                         $job[$page] = curl_getinfo($init);
    36.                         curl_multi_remove_handle($multi_init, $init);
    37.                         curl_close($init);
    38.                     }
    39.                 }
    40.  
    41.                 while ($thread_exec == CURLM_CALL_MULTI_PERFORM);
    42.             }
    43.         }
    44.  
    45.  
    46.         curl_multi_close($multi_init);
    47.  
    48.         return $job;
    49.     }
     
  2. tesla

    tesla Активный пользователь

    С нами с:
    29 фев 2016
    Сообщения:
    34
    Симпатии:
    1
    Проблема решена, удалите тему.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Это неуважение по отношению к другим участникам. Когда у тебя сложности, ты просишь о помощи. А сам никому помогать не хочешь.

    Напиши в чём была проблема — помоги другим, тем кто придёт через поисковик.
     
    denis01 нравится это.
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    @tesla, дружище, расскажи, че было-то, мы ж волнуемся.
     
    denis01 нравится это.
  5. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    аха а самое интересное мне - у меня такая же байда =) -1 выводит и все .. как лечить хз =) ну думаю вы помните ..
     
  6. tesla

    tesla Активный пользователь

    С нами с:
    29 фев 2016
    Сообщения:
    34
    Симпатии:
    1
    Извиняюсь, что сразу не написал. Проблема была решена использованием сторонней библиотеки
    https://github.com/KhristenkoYura/mcurl
    Выяснить почему не работает в моем велосипеде не удалось. Хотя почти уверен, что проблема на стороне сервера, так как на старом проекте этот скрипт завелся.