To retrieve the HTTP response code from a call to simplexml_load_file()
, the only way I know is to use PHP's little known $http_response_header
. This variable is automagically created as an array containing each response header separately, everytime you make a HTTP request through the HTTP wrapper. In other words, everytime you use simplexml_load_file()
or file_get_contents()
with a URL that starts with "http://"
You can inspect its content with a print_r()
such as
$xml = @simplexml_load_file($request_url);
print_r($http_response_header);
In your case, though, you might want to retrieve the XML separately with file_get_contents()
then, test whether you got a 4xx response, then if not, pass the body to simplexml_load_string()
. For instance:
$response = @file_get_contents($request_url);
if (preg_match('#^HTTP/... 4..#', $http_response_header[0]))
{
// received a 4xx response
}
$xml = simplexml_load_string($response);