Я хочу загрузить содержимое URL-адреса с помощью PHP, даже если код ответа HTTP равен 404. file_get_contents
будет ошибкой, и я не смог найти ответ с помощью Google. Как я могу это сделать?
По умолчанию file_get_contents возвращает только HTTP-ответы.
С curl вы получаете заголовки и контент отдельно.
Начиная с PHP 5.0, вы также можете указать контекст для file_get_contents
, что позволяет вам делать это, не полагаясь на url (см. Ответ Гордона).
Вы должны настроить оболочку потока для игнорирования ошибок:
ignore_errors
boolean
Извлечение содержимого даже в коды состояния отказа. По умолчаниюFALSE
Другими словами, do
echo file_get_contents( 'http://stackoverflow.com/foo/bar', false, stream_context_create( array( 'http' => array( '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-потока.
Вместо этого используйте cURL . Это позволяет значительно усилить контроль и позволит вам прочитать любой полученный контент и код состояния.