file_get_contents время от времени возвращает пустую строку при попытке прочитать веб-страницу - PullRequest
1 голос
/ 09 августа 2011

Я пытаюсь загрузить веб-страницу с помощью file_get_contents (), и у меня возникают проблемы.

По сути, мое веб-приложение будет использовать API данных YouTube для поиска видео по запросу пользователя, а затем читать страницу YouTube каждого видео, чтобы найти информацию, не предоставленную API. Я использую file_get_contents () для чтения страниц YouTube, а затем загружаю текст в анализатор DOM. В большинстве случаев это работает как шарм. Однако иногда я получаю предупреждения о том, что file_get_contents () вернул пустую строку (не для всех видео, только для некоторых из них). Я знаю, что URL-адрес, который я предоставляю, является правильным, потому что я отображаю ссылку на этот URL-адрес, и он работает, как и ожидалось. Я обновлю страницу, снова открою свой браузер, переключусь на другой браузер и т. Д., Но ничего не будет работать. Затем я оставлю эту вещь на час или два, вернусь к ней, и она снова волшебным образом сработает!

Вот фрагмент моего кода:

function processNext($int) {
    // this function processes the next $int videos from the youtube data api response ($xmlDoc)
    global $xmlDoc;
    $begin = count($_SESSION["results"]) - $_SESSION["start"] + 1;
        /* $_SESSION["results"] is the array of already-processed videos
           $_SESSION["start"] and $_SESSION["end"] are the indexes of the first and last videos in the $xmlDoc
        */
    $end = count($_SESSION["results"]) - $_SESSION["start"] + $int;

    for ($i = $begin; $i <= $end; $i++) {
        $video = $xmlDoc->entry[$i];
        $doc = new DOMDocument();
        $doc->strictErrorChecking = FALSE;
        libxml_use_internal_errors(true);

        // this is the line that is causing me problems
        $doc->loadHTML(file_get_contents(getWatchURL(getVidID($video->id)))); 

        $doc = $doc->documentElement;

               // then, do some processing on the $doc

    }
}

Возможно ли, что file_get_contents () истекает? CURL - лучший инструмент для того, что я делаю?

ОБНОВЛЕНИЕ: Я получаю такие же результаты с cURL.

1 Ответ

1 голос
/ 09 августа 2011

Посмотрите на $http_response_header. Вы можете проверить код статуса запроса. Если это что-то отличное от 200, скорее всего, что-то пошло не так. Подробнее о кодах статуса .

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