Lors du traitement des fichiers XML dans PHP, les erreurs d'analyse sont souvent rencontrées, en particulier lorsque le XML est incomplet ou incorrect au format. Par défaut, l'extension libxml publiera directement les messages d'erreur, ce qui peut entraîner l'affichage de la page déroutant ou la fuite d'informations sensibles. Pour attraper et gérer gracieusement ces erreurs, PHP fournit la fonction libxml_use_internal_errors , qui nous permet de collecter des erreurs et d'éviter la sortie directe, réalisant ainsi une gestion des erreurs plus flexible.
Cet article présentera en détail comment utiliser la fonction libxml_use_internal_errors et combinez l'exemple de code pour montrer comment attraper et gérer les erreurs d'analyse XML dans le développement réel.
libxml_use_internal_errors est une fonction de PHP qui active ou désactive le mécanisme de gestion des erreurs interne de libxml. Après activé, LIBXML ne sortira pas directement des erreurs, mais enregistrera les informations d'erreur. Le programme peut obtenir ces erreurs via d'autres fonctions de traitement.
Prototype de fonction:
bool libxml_use_internal_errors ([ bool $use_errors = true ] )
Paramètre $ use_errors : s'il faut activer la gestion des erreurs internes, par défaut .
Valeur de retour: statut de gestion des erreurs (valeur booléenne) avant l'appel.
Par défaut, si l'analyse XML échoue, l'erreur sera imprimée directement, ce qui peut endommager la disposition de la page et manquer de contrôle méticuleux sur l'erreur.
Après avoir utilisé libxml_use_internal_errors (true) , les erreurs d'analyse ne seront pas sorties directement, mais seront mises en cache. Vous pouvez obtenir la liste des erreurs via libxml_get_errors () et format ou enregistrer en fonction de vos besoins.
L'exemple suivant montre comment utiliser libxml_use_internal_errors pour analyser les chaînes XML et capturer les messages d'erreur lorsqu'une erreur se produit:
<?php
// Activer libxml Gestion des erreurs internes
libxml_use_internal_errors(true);
// Être analysé XML Chaîne(Écrit à tort)
$xmlString = <<<XML
<root>
<item>Example</item
</root>
XML;
// En créer un nouveau DOMDocument Objet
$doc = new DOMDocument();
// Essayer de charger XML Chaîne
if (!$doc->loadXML($xmlString)) {
echo "XML L'analyse a échoué,Le message d'erreur est le suivant:<br>";
// Obtenir et traverser les erreurs
$errors = libxml_get_errors();
foreach ($errors as $error) {
echo displayLibxmlError($error);
}
// Effacer le cache d'erreur
libxml_clear_errors();
} else {
echo "XML Analyse réussie!";
}
/**
* Format et affichage libxml message d'erreur
*
* @param LibXMLError $error
* @return string
*/
function displayLibxmlError($error) {
$return = "<br>";
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= "Warning $error->code: ";
break;
case LIBXML_ERR_ERROR:
$return .= "Error $error->code: ";
break;
case LIBXML_ERR_FATAL:
$return .= "Fatal Error $error->code: ";
break;
}
$return .= trim($error->message);
$return .= " on line $error->line";
return $return;
}
?>
Dans le code ci-dessus:
Utilisez libxml_use_internal_errors (true) pour activer la collecte d'erreurs.
Chargez XML avec DomDocument :: LoadXML , et s'il échoue, appelez libxml_get_errors pour obtenir une erreur.
Informations d'erreur de format et de sortie via la fonction personnalisée displaylibxmlerror .
Après l'analyse, appelez libxml_clear_errors () pour effacer le tampon d'erreur.
Dans les projets réels, XML est principalement lu à partir de fichiers et vous pouvez utiliser des méthodes similaires:
<?php
libxml_use_internal_errors(true);
$xmlFile = 'https://gitbox.net/example.xml';
$doc = new DOMDocument();
if (!$doc->load($xmlFile)) {
echo "charger XML Échec du fichier,L'erreur est la suivante:<br>";
foreach (libxml_get_errors() as $error) {
echo displayLibxmlError($error);
}
libxml_clear_errors();
} else {
echo "XML 文件charger成功。";
}
function displayLibxmlError($error) {
$return = "<br>";
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= "Warning $error->code: ";
break;
case LIBXML_ERR_ERROR:
$return .= "Error $error->code: ";
break;
case LIBXML_ERR_FATAL:
$return .= "Fatal Error $error->code: ";
break;
}
$return .= trim($error->message);
$return .= " on line $error->line";
return $return;
}
?>
Ici, remplacez le nom de domaine de l'URL de l'échantillon par Gitbox.net , qui répond aux exigences.
libxml_use_internal_errors (true) est la clé pour attraper des erreurs d'analyse XML.
Il évite la sortie directe des messages d'erreur, ce qui le rend pratique pour le contrôle du programme et la journalisation.
La combinaison de libxml_get_errors () et libxml_clear_errors () peut gérer efficacement les informations d'erreur.
Convient pour divers scénarios où XML est chargé à partir de chaînes, de fichiers ou d'adresses distantes.
La maîtrise de l'utilisation de cette fonction peut aider les développeurs à écrire un code de traitement XML plus robuste et plus convivial.