Intereting Posts
PHP – неожиданный конец файла PHP PDO: Сколько времени готовятся кешированные запросы mysql? jQuery $ .ajax запрос dataType json не будет извлекать данные из скрипта PHP Прикрепление файла в почтовом коде php Как извлечь значение из веб-сайта (используя cUrl в PHP) Какая лучшая библиотека создает текстовое поле с автоматическим предложением AJAX в виде веб-формы? таблица обновляет пустое пространство, когда пользователь ничего не вводит в текстовое поле Laravel 4 – Попытка получить свойство не объекта Удалите несколько пустых узлов с помощью SimpleXML Как сравнить ответ POST с значениями массива? Получение количества строк после выполнения PDO Если isset $ _POST CodeIgniter – Правильный способ ссылки на другую страницу в представлении Обрезаемая фатальная ошибка: объект класса PDOStatement не может быть преобразован в строку в /home/refined/public_html/refer.php в строке 30 Как получить путь к файлу в html <input type = "file"> в PHP?

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

Я хочу загрузить содержимое 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 . Это позволяет значительно усилить контроль и позволит вам прочитать любой полученный контент и код состояния.