Pour récupérer le code de réponse HTTP d'un appel à simplexml_load_file()
, la seule façon que je connaisse est d'utiliser le peu connu $http_response_header
de PHP. Cette variable est créée automatiquement en tant que tableau contenant chaque en-tête de réponse séparément, chaque fois que vous effectuez une requête HTTP via l'encapsuleur HTTP. En d'autres termes, chaque fois que vous utilisez simplexml_load_file()
ou file_get_contents()
avec une URL qui commence par « http: // »
Vous pouvez vérifier son contenu avec un print_r()
tel que
$xml = @simplexml_load_file($request_url);
print_r($http_response_header);
Dans votre cas, cependant, vous peut vouloir récupérer le XML séparément avec file_get_contents()
puis, tester si vous avez une réponse 4xx, sinon, passez le corps à simplexml_load_string()
. Par exemple:
$response = @file_get_contents($request_url);
if (preg_match('#^HTTP/... 4..#', $http_response_header[0]))
{
// received a 4xx response
}
$xml = simplexml_load_string($response);
J'aurais dû être un peu plus clair - bien que cela fonctionne et me permet d'attraper l'erreur et d'arrêter le script d'essayer de faire quelque chose de plus. Je reçois toujours le message d'avertissement par défaut: Avertissement: file_get_contents (http://domain.com) [function.file-get-contents]: échec de l'ouverture du flux: requête HTTP a échoué! HTTP/1.0 403 Interdit La raison pour laquelle je les attrape est que je fais plusieurs requêtes et que je veux attraper correctement l'erreur quand cela arrive et donner un avertissement convivial plutôt que le défaut. – Scoobler
Ensuite, vous utilisez l'opérateur mute @ comme démontré dans l'extrait mis à jour. http://docs.php.net/manual/fr/language.operators.errorcontrol.php –