PHP simplexml_load_file catch 403 - PullRequest
       7

PHP simplexml_load_file catch 403

1 голос
/ 21 января 2010

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

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

Я использую:

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

Для проверки статуса ответа. 200 бенинг все ок, продолжай.

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

Ответы [ 2 ]

8 голосов
/ 21 января 2010

Чтобы получить код ответа HTTP из звонка на simplexml_load_file(), единственный известный мне способ - использовать малоизвестный PHP $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);
0 голосов
/ 21 января 2010

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

...