Чтобы получить код ответа 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);