Загрузите содержимое URL-адреса в PHP, даже если оно возвращает 404

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

Ответ 2

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

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);

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

Ответ 3

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

Ответ 4

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

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