PHP cURL - случайно - не работает, отладка ошибок ничего не дает - PullRequest
0 голосов
/ 05 ноября 2011

По сути, у меня есть простая функция загрузки веб-страниц cURL, которая включает в себя следующее:

function FETCH_WEBPAGE($url) {

    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30');
    $file = curl_exec($curl_handle);

    if($file===false) {
        DEBUG_TXT('Error reading '.$url.chr(10).curl_error($curl_handle));
    } else {
        DEBUG_TXT('Fetching: '.$url.' - Got: '.$response['url'].chr(10).$file);
    }

    $response = curl_getinfo($curl_handle);
    curl_close($curl_handle);

    if(trim($response['url'])=='') {
        $response['url'] = $url;
    }

    return array('file'=>$file,'url'=>$response['url']);

}

Теперь я использую свой собственный сервер Apache, а также выделенный сервер, на котором работает Apache. Когда я запускаю этот код со своей машины, все работает гладко. Мой DEBUG_TXT возвращает ответ «Извлечение / получение» (с содержимым), если сервер, с которого я запрашиваю, доступен. (Создает текстовый файл DEBUG.)

Однако, когда я запускаю это со своего выделенного сервера, я НЕ МОГУ заставить его работать. Я всегда получаю сообщение об ошибке «Не удалось найти хост» или «Истекло время поиска имени» в качестве ошибки cURL.

Самое странное, что для других пользователей веб-сайта эта функция работает ОТЛИЧНО и не дает им ошибок - даже при попытке доступа к идентичным URL-адресам. За свою жизнь я не могу даже понять, почему это выборочно не работает для меня и для меня одного.

Edit:

Я должен упомянуть, что curl_getinfo (), кажется, работает для меня, даже когда curl_exec () не работает. Я могу получить информацию заголовка, например, отлично, но curl_exec () все равно не удастся. Меня это сильно беспокоит, так как, похоже, это напрямую связано с моей учетной записью на сайте - может ли способ, которым я получаю информацию о cookie-файлах для себя, быть связан с этой ошибкой? Я не мог себе представить, как это могло бы быть, но это буквально единственное различие (с точки зрения интерпретатора PHP) между тем, как я имею дело с тем, как я лично буду использовать функцию по сравнению с другим пользователем на сайте.

Кроме того, я могу успешно пропинговать веб-сайты, к которым пытаюсь получить доступ, со своего выделенного компьютера при подключении через SSH.

1 Ответ

1 голос
/ 06 ноября 2011

Я решил свою проблему - хотя я до сих пор не знаю, что было первоначальной проблемой. Я переключился на использование get_headers () с stream_context_set_default () и fopen () с stream_context_create ().

К сожалению (для меня), fopen () учитывает коды ответов HTTP, поэтому он не будет извлекать данные страницы, такие как пользовательские страницы ошибок 404 или 503 страницы. Мой обходной путь для этого - проверить заголовки, прежде чем я попытаюсь выполнить fopen, и просто вывести содержимое файла как «404 - Страница не найдена» и т. Д.

На самом деле это не решение моей первоначальной проблемы, но оно решило проблему. Я все еще озадачен тем, почему cURL перестал работать из ниоткуда. Хотя в прошлом у меня были проблемы с тем, что cURL выборочно решил «не работать» даже на моей собственной машине. А пользователи моего сайта сообщают (хотя и нечасто) об ошибках того же типа.

Теперь все идет гладко, так что, похоже, проблема решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...