Криво работает cURL

 
0
 
PHP
ava
rafic | 20.02.2013, 00:03
Ребята, спасайте. Срочно нужно решить следующую проблему.
Обрабатываю ссылки через cURL но в итоге получаю такую картину:

Array ( [msg] => 1 [result] => 6 [handle] => Resource id #75 ) -> 
Array ( [msg] => 1 [result] => 6 [handle] => Resource id #76 ) -> 
Array ( [msg] => 1 [result] => 6 [handle] => Resource id #77 ) -> 
Array ( [msg] => 1 [result] => 6 [handle] => Resource id #78 ) -> 
Array ( [msg] => 1 [result] => 6 [handle] => Resource id #79 ) -> 
Array ( [msg] => 1 [result] => 6 [handle] => Resource id #80 ) -> 
Array ( [msg] => 1 [result] => 6 [handle] => Resource id #81 ) -> 
Array ( [msg] => 1 [result] => 6 [handle] => Resource id #82 ) -> 
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #63 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #66 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #71 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #67 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #64 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #72 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #69 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #73 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #74 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #70 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #68 ) -> работает нормально
Array ( [msg] => 1 [result] => 0 [handle] => Resource id #65 ) -> работает нормально


Обрабатываю 20 ссылок.
В ответ от курла приходит картинка выше: стандартно 8 первых ответов тупо пустые, а 12 ответов работают нормально.
Код самый стандартный брал с офф ресурса и допиливал под себя.
Для каждого ответа я специально вывожу значения функции

$info = curl_multi_info_read($cmh);
print_r($info);

И вижу что у первых 8-ми ссылок (которые не работают) в массиве $info по ключу result находится значение 6, а у всех остальных (рабочих) ссылок - значение 0.
В документации написано что по ключу result находится
Одна из констант CURLE_*. Если все OK, результатом будет константа CURLE_OK.
и больше ничего=((

        // количество активных потоков
        $active = null;
        // запускаем выполнение потоков
        do{
            $mrc = curl_multi_exec($cmh, $active);
        }while($mrc == CURLM_CALL_MULTI_PERFORM);
        // выполняем, пока есть активные потоки

        while ($active && ($mrc == CURLM_OK))
        {
            if (curl_multi_select($cmh) != -1 )
            {
                do
                {
                    $mrc = curl_multi_exec($cmh, $active);
                    $info = curl_multi_info_read($cmh);
                    
                    print_r($info);
                    
                    if ($info['msg'] == CURLMSG_DONE)
                    {

                        $ch = $info['handle'];
                        echo "-> ". curl_multi_getcontent($ch) ." <br/>";
                        
                    }
                    
                } while ($mrc == CURLM_CALL_MULTI_PERFORM);
            }
        }
        
        // закрываем мультикурл
        curl_multi_close($cmh);
Ответы (3)
ava
Fortop | 19.02.2013, 23:53 #
Цитата (rafic @  19.2.2013,  23:03 findReferencedText)
И вижу что у первых 8-ми ссылок (которые не работают) в массиве $info по ключу result находится значение 6, а у всех остальных (рабочих) ссылок - значение 0.

В документации написано что по ключу result находится 

Одна из констант CURLE_*. Если все OK, результатом будет константа CURLE_OK.

Нужно просто знать откуда растут ноги большинства расширений пхп и пользоваться гуглом для них

http://curl.haxx.se/libcurl/c/libcurl-errors.html

Добавлено позднее:
Ах, да.
Гуглил простую вещь curl error codes
ava
rafic | 20.02.2013, 00:22 #
Цитата (Fortop @ 19.2.2013,  23:53)
Цитата (rafic @  19.2.2013,  23:03 \\"findReferencedText\\")
И вижу что у первых 8-ми ссылок (которые не работают) в массиве $info по ключу result находится значение 6, а у всех остальных (рабочих) ссылок - значение 0.


В документации написано что по ключу result находится 


Одна из констант CURLE_*. Если все OK, результатом будет константа CURLE_OK.


Нужно просто знать откуда растут ноги большинства расширений пхп и пользоваться гуглом для них



http://curl.haxx.se/libcurl/c/libcurl-errors.html



Добавлено позднее:

Ах, да.

Гуглил простую вещь curl error codes

То есть цифра 6 которую возвращает result это номер ошибки?
Я, когда читал доки, думал что там сразу должна быть написана ошибка, а не ее норме.
Чет я и вправду затупил, ну посмотрим... поможет ли мне это.

И так, благодаря Fortop я узнал что циферка 6, которую выдавала функция curl_multi_info_read по ключу result это ошибка:

CURLE_COULDNT_RESOLVE_HOST (6)
Couldn't resolve host. The given remote host was not resolved. (Невозможно обнаружить узел)

Но у машины, на которой выполняется скрипт доступ в интернет есть.

Еще заметил такую особенность, которая совсем опровергает обнаруженную ошибку.
Если после выполнения скрипта удалять те ссылки, от которых пришел ответ и выполнить скрипт снова и снова - то таким образом все ссылки за пару таких проходов уйдут.

Пример:
Есть 20 ссылок - выполняем скрипт и удаляем выполненные 12 ссылок, осталось 8.
Выполняем скрипт снова и 8 ссылок которые не обработались в первый раз обрабатываются.

Как такое в принципе может быть?
ava
Fortop | 20.02.2013, 03:41 #
Цитата (rafic @  20.2.2013,  00:22 findReferencedText)
Но у машины, на которой выполняется скрипт доступ в интернет есть.

А это никого не волнует.

"The given remote host was not resolved" - это ошибка DNS либо у тебя, либо у вышестоящих провайдеров и наличие интернета ей не мешает.

Добавлено позднее:
Цитата (rafic @  20.2.2013,  00:22 findReferencedText)
То есть цифра 6 которую возвращает result это номер ошибки?

не номер ошибки, а код статуса.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
ava  Fortop   rafic
advanced
Отправить