Я хочу загрузить содержимое URL-адреса с помощью PHP, даже если код ответа HTTP равен 404. file_get_contents
будет ошибкой, и я не смог найти ответ с помощью Google. Как я могу это сделать?
Загрузите содержимое URL-адреса в PHP, даже если оно возвращает 404
Ответ 1
По умолчанию file_get_contents возвращает содержимое ответов HTTP 200.
С помощью curl вы получаете заголовки и контент отдельно.
Начиная с PHP 5.0, вы также можете указать контекст для file_get_contents
, что позволит вам сделать это, не полагаясь на url (см. ответ Гордона).
Ответ 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);