Search code examples
phpxmlsimplexmlhttp-status-code-403

PHP simplexml_load_file catch 403


I am using the following PHP:

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

I use:

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

To check the status of the response. 200 bening everything is ok, carry on.

However if I get a 403 access denied error, how do I catch this in PHP so I can return a user friendly warning?


Solution

  • 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);