Загрузите содержимое URL в PHP, даже если он возвращает 404 - PullRequest
15 голосов
/ 16 июля 2011

Я хочу загрузить содержимое URL-адреса с помощью PHP, даже если код ответа HTTP равен 404. file_get_contents произойдет ошибка, и я не смог найти ответ с помощью Google. Как я могу это сделать?

Ответы [ 4 ]

64 голосов
/ 16 июля 2011

Вам необходимо настроить потоковую оболочку , чтобы игнорировать ошибки:

ignore_errors boolean Извлекать содержимое даже по кодам состояния ошибок.По умолчанию FALSE

Другими словами, выполните

echo file_get_contents(
    'http://stackoverflow.com/foo/bar',
    false,
    stream_context_create([
        'http' => [
            'ignore_errors' => true,
        ],
    ])
);

, и вы получите страницу 404.

Если вы хотите, чтобы это было поведение по умолчанию для потоков HTTP, используйте

stream_context_set_default(
    array('http' => array(
        'ignore_errors' => true)
    )
);

Любые вызовы, использующие упаковщик потока HTTP, будут использовать эти настройки, например, вы можете просто сделать

echo file_get_contents('http://stackoverflow.com/foo/bar');

Если вы также хотите получить заголовок ответа , просто сделайте

print_r($http_response_header);

после вызова.Переменная заполняется после каждого вызова оболочкой потока http.

4 голосов
/ 16 июля 2011

По умолчанию file_get_contents возвращает только содержимое HTTP 200 ответов.

С помощью curl вы получаете заголовки и содержимое отдельно.

Начиная с PHP 5.0, вы также можете указать контекст для file_get_contents, что позволит вам сделать это.не полагаясь на URL (см. ответ Гордона).

2 голосов
/ 16 июля 2011

Используйте взамен cURL . Это обеспечивает гораздо больший контроль и позволит вам читать любой полученный контент и код состояния.

0 голосов
/ 15 января 2018

Шаг 1: проверьте код возврата: $content = file_get_contents("websitelink"); if($content === FALSE) { // handle error here... }

Шаг 2: подавить предупреждение, поместив оператор контроля ошибок (т.е. @) перед вызовом file_get_contents (): $content = @file_get_contents($site);

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