PHP simplexml_load_file la capture des erreurs de fichiers
Est-il possible d'attraper simplexml erreurs de fichiers? Je me connecte à un webservice qui échoue parfois, et j'ai besoin de faire le système de passer d'un fichier si elle renvoie http erreur ou quelque chose de similaire.
Merci pour la mise à jour, je pense que certaines des options de la liste n'étaient pas actives en 2009, ne sais pas si. Je suis le marquage ce comme la réponse correcte de toute façon puisque c'est la meilleure réponse. Essayé. Ne pas attraper ou de supprimer toutes les mises en garde... d'Accord @ est de la plaine sale ainsi
Si vous n'êtes pas intéressé par erreur de déclaration ou d'enregistrement lorsque le webservice échoue, vous pouvez utiliser l'erreur de la suppression de l'opérateur:
$xml=@simplexml_load_file('http://tri.ad/test.xml');if($xml){//Do some stuff . . .}
Mais c'est un simple hack. Une solution plus robuste serait de charger le fichier XML avec cURL, journal de toutes les demandes ayant échoué, analyser n'importe quel document XML renvoyé avec simplexml_load_string, journal XML en analyser les erreurs et ensuite faire quelques trucs avec le XML valide.
Vous parlez de deux choses différentes. HTTP erreurs n'ont rien à voir avec un fichier XML est valide, de sorte que vous êtes en train de regarder à deux domaines distincts de la gestion des erreurs.
Vous pouvez prendre avantage de libxml_use_internal_errors() pour supprimer toutes les erreurs XML, puis vérifier manuellement (à l'aide de libxml_get_errors()) après chaque opération d'analyse. Je vous suggère de le faire de cette façon, que vos scripts ne pas produire une tonne de E_WARNING messages, mais vous pourrez toujours trouver le fichier XML non valide fichiers.
Comme pour les erreurs HTTP, le traitement de ces dépendra de la façon dont vous vous connectez à un webservice et de récupérer les données.
Vous pouvez définir un gestionnaire d'erreurs dans PHP pour lancer une Exception à toutes les Erreurs PHP: (Exemple et autres documents trouvés ici: PHP.net)
function exception_error_handler($errno, $errstr, $errfile, $errline ){thrownewErrorException($errstr,0, $errno, $errfile, $errline);}
set_error_handler("exception_error_handler");
Je ne veux pas abandonner le système en cas d'erreur, il suffit de sauter la fonction et poursuit le proccess Eh bien, par définition, les Exceptions ne pas abandonner l'exécution. Si vous enveloppez votre simplexml_load_file() dans un bloc try-catch, vous pouvez intercepter toute erreur.
Une autre option est d'utiliser le libxml_use_internal_errors() fonction pour capturer les erreurs. Les erreurs peuvent ensuite être récupérées à l'aide de la libxml_get_errors() fonction. Cela vous permettra de parcourir en boucle si vous voulez vérifier ce que les erreurs spécifiques. Si vous utilisez cette méthode, vous souhaitez assurez-vous que vous désactivez les erreurs de la mémoire lorsque vous avez terminé avec eux afin qu'ils ne perdent pas de votre espace de mémoire.
Voici un exemple:
<?php
//Store errors in memory rather than outputting them
libxml_use_internal_errors(true);
$xml = simplexml_load_file('myfile.xml');if(!$xml){//Exit because we can't process a broken fileexit;}//Important to clear the error buffer
libxml_clear_errors();//Display your xml code
print_r($xml);
Un autre exemple de réellement faire usage des erreurs que nous avons capturés:
<?php
//Store errors in memory rather than outputting them
libxml_use_internal_errors(true);
$xml = simplexml_load_file('myfile.xml');if(!$xml){
echo "Your script is not valid due to the following errors:\n";//Process error messagesforeach(libxml_get_errors()as $error){
echo "$error";}//Exit because we can't process a broken fileexit;}//Important to clear the error buffer
libxml_clear_errors();//Display your xml code
print_r($xml);
À l'aide de
@
est tout simplement sale.Si vous regardez le manuel, il y a un paramètre options:
Toutes les option de la liste est disponible ici: http://www.php.net/manual/en/libxml.constants.php
Ce est la bonne façon de supprimer les avertissements:
Essayé. Ne pas attraper ou de supprimer toutes les mises en garde... d'Accord @ est de la plaine sale ainsi
OriginalL'auteur Mārtiņš Briedis
Si vous n'êtes pas intéressé par erreur de déclaration ou d'enregistrement lorsque le webservice échoue, vous pouvez utiliser l'erreur de la suppression de l'opérateur:
Mais c'est un simple hack. Une solution plus robuste serait de charger le fichier XML avec cURL, journal de toutes les demandes ayant échoué, analyser n'importe quel document XML renvoyé avec
simplexml_load_string
, journal XML en analyser les erreurs et ensuite faire quelques trucs avec le XML valide.OriginalL'auteur leepowers
Vous parlez de deux choses différentes. HTTP erreurs n'ont rien à voir avec un fichier XML est valide, de sorte que vous êtes en train de regarder à deux domaines distincts de la gestion des erreurs.
Vous pouvez prendre avantage de libxml_use_internal_errors() pour supprimer toutes les erreurs XML, puis vérifier manuellement (à l'aide de libxml_get_errors()) après chaque opération d'analyse. Je vous suggère de le faire de cette façon, que vos scripts ne pas produire une tonne de
E_WARNING
messages, mais vous pourrez toujours trouver le fichier XML non valide fichiers.Comme pour les erreurs HTTP, le traitement de ces dépendra de la façon dont vous vous connectez à un webservice et de récupérer les données.
OriginalL'auteur zombat
En cas d'erreur, votre simplexml_load_file doit retourner false.
Ce faisant somethign aussi simple que cela:
Est un moyen de détecter les erreurs.
Merci, bon appel - j'ai édité ce
OriginalL'auteur Andy Baird
Vous pouvez définir un gestionnaire d'erreurs dans PHP pour lancer une Exception à toutes les Erreurs PHP: (Exemple et autres documents trouvés ici: PHP.net)
Eh bien, par définition, les Exceptions ne pas abandonner l'exécution. Si vous enveloppez votre simplexml_load_file() dans un bloc try-catch, vous pouvez intercepter toute erreur.
OriginalL'auteur Dominic Barnes
Une autre option est d'utiliser le
libxml_use_internal_errors()
fonction pour capturer les erreurs. Les erreurs peuvent ensuite être récupérées à l'aide de lalibxml_get_errors()
fonction. Cela vous permettra de parcourir en boucle si vous voulez vérifier ce que les erreurs spécifiques. Si vous utilisez cette méthode, vous souhaitez assurez-vous que vous désactivez les erreurs de la mémoire lorsque vous avez terminé avec eux afin qu'ils ne perdent pas de votre espace de mémoire.Voici un exemple:
Un autre exemple de réellement faire usage des erreurs que nous avons capturés:
OriginalL'auteur kojow7
Fichier XML:samplexml.xml<?xml version="1.0"?> <xml> <tirer> <les méthodes candelete>oui</les méthodes candelete> <forpayroll>aucun</forpayroll> <nom>bonjour</nom> </draw> <tirer> <les méthodes candelete>oui2</les méthodes candelete> <forpayroll>3</forpayroll> <nom>hello3</nom> </draw> </xml>
OriginalL'auteur k...