PHP DOMDocument erreur de manipulation
Dans ma demande, je suis le chargement de données xml à partir de l'url afin de l'analyser.
Mais parfois, cette url peut ne pas être valide. Dans ce cas, j'ai besoin de gérer les erreurs.
J'ai le code suivant:
$xdoc = new DOMDocument();
try{
$xdoc->load($url); //This line causes Warning: DOMDocument::load(...)
//[domdocument.load]: failed to open stream:
//HTTP request failed! HTTP/1.1 404 Not Found in ...
} catch (Exception $e) {
$xdoc = null;
}
if($xdoc == null){
//Handle
} else {
//Proceed
}
Je sais que j'ai probablement fait une erreur, mais ce qui est une bonne façon de gérer ce genre d'exceptions? Je ne veux pas voir les messages d'erreur sur ma page.
Le manuel de DOMDocument::load() dit:
Si une chaîne vide est passé comme
nom de fichier ou un fichier vide nommé, un
avertissement sera généré. Cette
avertissement n'est pas généré par libxml et
ne peuvent pas être traitées à l'aide de libxml de l'erreur
les fonctions de gestion.
Mais il n'y a pas d'informations sur la façon de le gérer.
Grâce.
Vous devez vous connecter pour publier un commentaire.
De ce que je peux obtenir à partir des la documentation, la manipulation des avertissements émis par cette méthode est difficile parce qu'ils ne sont pas générés par la libxml extension et ne peuvent donc pas être gérées par
libxml_get_last_error()
. Vous pouvez soit utiliser la suppression d'erreur de l'opérateur et vérifier la valeur de retour pourfalse
......ou inscrivez-vous un gestionnaire d'erreur, ce qui lève une exception en cas d'erreur:
et puis l'attraper.
Qui fonctionne pour moi en PHP 5.3. Mais si vous ne l'utilisez pas
loadXML
, vous pourriez avoir besoin de faire quelques modifications.loadXML()
s'est terminé sans erreur. Actuellement, siloadXML()
émet une erreur qui est intercepté par le gestionnaire d'erreur personnalisé,restore_error_handler();
ne sera jamais invoquée. Le gestionnaire d'erreur personnalisé resteront en vigueur, -- qui, nous l'avons presque certainement ne voulez pas. Pour corriger cela, je vous conseille d'ajouter un appel àrestore_error_handler();
à l'intérieur de la fermeture duif
déclaration, juste avant de lancer l'exception.Pour désactiver jeter des erreurs:
libxml_get_last_error()
.De php.net
Dans votre environnement de production, vous ne devriez pas avoir des erreurs affichées à l'utilisateur. Ils n'ont pas besoin de les voir de si compte tenu de cela, vous pouvez utiliser...
Pour moi , la suite fait le tour