Intereting Posts
mysql_query () ожидает, что параметр 1 будет строкой, ресурс указан используя Ajax с 3 последовательными выпадающими списками в зависимости от eachother FILTER_VALIDATE_EMAIL делает строку безопасной для вставки в базу данных? «Профилировщик с визуализацией» для PHP с «полной визуализацией backtrace»? форматированный XML-файл с использованием php Рекомендации по отображению результатов поиска с соответствующими фрагментами текста из фактического результата Самый быстрый способ проверить, является ли строка JSON в PHP? Получить информацию о мероприятии с идентификатора ресурса в режиме push-уведомления удаление управляющих символов в строке utf-8 Получите настенный канал с общедоступной страницы Facebook с помощью Graph API – действительно ли это сложно? Упрощение / форматирование вывода в SimpleXML Положить PNG на JPG в PHP Объекты PHP DOMNode и nodeValue dompdf и тег img, изображение не будет отображаться Поиск с помощью нескольких переменных PHP / Mysql

PHP simplexml_load_file catch 403

Я использую следующий PHP:

$xml = simplexml_load_file($request_url) or die("url not loading"); 

Я использую:

 $status = $xml->Response->Status->code; 

Проверить статус ответа. 200 bening все в порядке, продолжайте.

Однако, если я получаю ошибку с ошибкой доступа 403, как я могу ее поймать на PHP, чтобы я мог вернуть удобное для пользователя предупреждение?

Чтобы получить код ответа HTTP от вызова simplexml_load_file() , единственный способ, которым я знаю, – использовать малоизвестный $http_response_header . Эта переменная автоматически создается как массив, содержащий каждый заголовок ответа отдельно, каждый раз, когда вы делаете HTTP-запрос через HTTP-обертку. Другими словами, каждый раз, когда вы используете simplexml_load_file() или file_get_contents() с URL-адресом, который начинается с «http: //»,

Вы можете проверить его содержимое с помощью print_r() например

 $xml = @simplexml_load_file($request_url); print_r($http_response_header); 

В вашем случае, однако, вы можете захотеть получить XML отдельно с помощью file_get_contents() затем проверьте, есть ли у вас ответ 4xx, а если нет, передайте тело в simplexml_load_string() . Например:

 $response = @file_get_contents($request_url); if (preg_match('#^HTTP/... 4..#', $http_response_header[0])) { // received a 4xx response } $xml = simplexml_load_string($response); 

Вам нужно будет использовать что-то вроде модуля cURL или модуля HTTP для извлечения файла, а затем использовать предоставленные ими функции для обнаружения ошибки HTTP, а затем передать строку из них в simplexml_load_string .