En PHP, la gestion des erreurs par défaut est simple. Un message d'erreur est envoyé au navigateur avec le nom du fichier, le numéro de ligne et un message décrivant l'erreur.
Gestion des erreurs PHP
La gestion des erreurs est un élément important lors de la création de scripts et d'applications Web. Si votre code manque de codage de détection d’erreurs, le programme n’aura pas l’air professionnel et ouvrira la porte à des risques de sécurité.
Ce tutoriel couvre certaines des méthodes de détection d'erreurs les plus importantes en PHP.
Nous vous expliquerons différentes méthodes de gestion des erreurs :
1. Simple instruction "die()"
2. Erreurs personnalisées et déclencheurs d'erreurs
. 3. Rapport d'erreurs
Gestion des erreurs de base : utilisez la fonction die()
Le premier exemple montre un script simple ouvert pour un fichier texte :
<?php $file=fopen("welcome.txt","r"); ?>
Si le fichier n'existe pas, vous obtiendrez une erreur comme celle-ci :
Attention : fopen(welcome.txt) [function.fopen] : échec d'ouverture du flux :
Aucun fichier ou répertoire de ce type dans /www/php/test/test.php à la ligne 2
Pour éviter que les utilisateurs ne reçoivent des messages d'erreur comme celui ci-dessus, nous vérifions si le fichier existe avant d'y accéder :
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>
Maintenant, si le fichier n'existe pas, vous obtiendrez un message d'erreur comme celui-ci :
Le fichier n'existe pas
Le Le code ci-dessus est plus efficace que le code précédent car il utilise un mécanisme simple de gestion des erreurs pour terminer le script après une erreur.
Cependant, simplement mettre fin au script n'est pas toujours approprié. Examinons les fonctions PHP alternatives pour gérer les erreurs.
Créer un gestionnaire d'erreurs personnalisé
Créer un gestionnaire d'erreurs personnalisé est très simple. Nous avons simplement créé une fonction dédiée qui peut être appelée lorsqu'une erreur survient en PHP.
La fonction doit être capable de gérer au moins deux paramètres (niveau d'erreur et message d'erreur), mais peut accepter jusqu'à cinq paramètres (facultatif : fichier, numéro de ligne et contexte d'erreur) :
Syntaxe
error_function(error_level, error_message, error_file, error_line, error_context)
Paramètres 🎜> error_level Obligatoire. Spécifie le niveau de rapport d'erreurs pour les erreurs définies par l'utilisateur. Doit être un nombre. Consultez le tableau ci-dessous : Niveaux de rapport d'erreurs.
error_message Obligatoire. Spécifie les messages d'erreur pour les erreurs définies par l'utilisateur.
error_file Facultatif. Spécifie le nom du fichier dans lequel l'erreur s'est produite.
error_line Facultatif. Spécifie le numéro de ligne où l'erreur s'est produite.
error_context Facultatif. Spécifie un tableau contenant chaque variable utilisée lorsque l'erreur s'est produite et leurs valeurs.
Niveaux de rapport d'erreurs
Ces niveaux de rapport d'erreurs sont différents types d'erreurs gérées par des gestionnaires d'erreurs définis par l'utilisateur :
Valeur E_WARNING Erreur d'exécution non fatale. Ne suspendez pas l’exécution du script. 8 Notification d'exécution E_NOTICE. Se produit lorsque le script détecte une erreur possible, mais peut également se produire lorsque le script s'exécute normalement.
256 E_USER_ERROR Erreur fatale générée par l'utilisateur. Ceci est similaire à E_ERROR défini par le programmeur à l'aide de la fonction PHP trigger_error().512 E_USER_WARNING Avertissement non fatal généré par l'utilisateur. Ceci est similaire au E_WARNING défini par le programmeur à l'aide de la fonction PHP trigger_error().
1024 E_USER_NOTICE Notification générée par l'utilisateur. Ceci est similaire à E_NOTICE défini par le programmeur à l'aide de la fonction PHP trigger_error().
4096 E_RECOVERABLE_ERROR Erreur fatale récupérable. Comme E_ERROR, mais peut être intercepté par un gestionnaire défini par l'utilisateur. (Voir set_error_handler())
8191 E_ALL Toutes les erreurs et avertissements. (En PHP 5.4, E_STRICT fait partie de E_ALL)
Dans les types ci-dessus :
1 L'erreur est la plus grave et doit être résolue. Sinon, le programme ne peut pas continuer à s'exécuter
2. L'avertissement est également très important. Tong doit également être résolu. Si c'est clair et intentionnel, vous n'avez pas besoin de vous en occuper
3. Remarquez Vous n'avez pas à vous en occuper. Mais dans certaines entreprises, les normes des projets sont particulièrement élevées. Il doit également être résolu dans des projets présentant des exigences élevées. Parce que la notification affectera l’efficacité d’exécution de PHP. Se produit généralement lorsque les fonctions ne sont pas définies, etc.
4. Les erreurs d'analyse font référence aux erreurs de syntaxe et aux fautes de frappe, qui doivent être résolues
5. 🎜> Maintenant, créons une fonction qui gère les erreurs :
function customError($errno, $errstr)
{
echo "<b>Erreur :</b> [$errno] $errstr<br>";
echo "Fin du script";
die();
} }
Le code ci-dessus est une simple fonction de gestion des erreurs. Lorsqu'il est déclenché, il obtient le niveau d'erreur et le message d'erreur. Il imprime ensuite le niveau d'erreur et le message, puis termine le script.
Maintenant que nous avons créé une fonction de gestion des erreurs, nous devons déterminer quand la déclencher.
Définir le gestionnaire d'erreurs
Le gestionnaire d'erreurs par défaut de PHP est le gestionnaire d'erreurs intégré. Nous allons transformer la fonction ci-dessus en gestionnaire d'erreurs par défaut lorsque le script est en cours d'exécution.
Le gestionnaire d'erreurs peut être modifié pour s'appliquer uniquement à certaines erreurs, afin que le script puisse gérer différentes erreurs de différentes manières. Cependant, dans ce cas, nous allons utiliser notre gestionnaire d'erreurs personnalisé pour toutes les erreurs :
set_error_handler("customError");
Puisque nous voulons, notre fonction personnalisée peut gérer toutes les erreurs, set_error_handler() ne nécessite qu'un seul paramètre et un deuxième paramètre peut être ajouté pour spécifier le niveau d'erreur.
Exemple
Testez ce gestionnaire d'erreurs en essayant de générer une variable qui n'existe pas :
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 设置错误处理函数 set_error_handler("customError"); // 触发错误 echo($test); ?>
La sortie du code ci-dessus ressemble à ceci :
Erreur : [8] Variable non définie : test
déclenche une erreur
in L'emplacement du script où l'utilisateur saisit les données, utile pour déclencher une erreur lorsque la saisie de l'utilisateur n'est pas valide. En PHP, cette tâche est accomplie par la fonction trigger_error().
Exemple
Dans cet exemple, si la variable "test" est supérieure à "1", une erreur se produira :
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
La sortie du code ci-dessus ressemblera comme ceci :
Remarque : La valeur de la variable doit être inférieure ou égale à 1
dans /www/test/php.php à la ligne 5
Vous pouvez partout où une erreur est déclenchée, en ajoutant un deuxième paramètre, vous pouvez spécifier le niveau d'erreur qui est déclenché.
Types d'erreurs possibles :
1. E_USER_ERROR - Erreur d'exécution fatale générée par l'utilisateur. L'erreur ne peut pas être récupérée. L'exécution du script a été interrompue.
2. E_USER_WARNING - Avertissement d'exécution non fatal généré par l'utilisateur. L'exécution du script n'est pas interrompue.
3. E_USER_NOTICE - Par défaut. Notifications d'exécution générées par l'utilisateur. Se produit lorsque le script détecte une erreur possible, mais peut également se produire lorsque le script s'exécute normalement.
Exemple
Dans cet exemple, si la variable "test" est supérieure à "1", une erreur E_USER_WARNING se produit. Si E_USER_WARNING se produit, nous utiliserons notre gestionnaire d'erreurs personnalisé et terminerons le script :
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
La sortie du code ci-dessus ressemblera à ceci :
Erreur : [512] Valeur de la variable Doit être inférieur ou égal à 1
Fin du script
Maintenant que nous avons appris comment créer nos propres erreurs et comment les déclencher, étudions les enregistrements d'erreurs.
Enregistrement des erreurs
Voici les éléments de configuration pertinents qui doivent être utilisés dans php.ini. Ces deux éléments de configuration sont :
Paramètres 🎜>log_errors activé/désactivé log_errors_max_len Spécifiez le chemin où le journal des erreurs est enregistré Explication : Les log_errors et log_errors_max_len dans le tableau sont très faciles à comprendre.
Et error_log précise le chemin sur lequel les erreurs seront stockées. Le syslog dans les éléments de configuration peut être un peu difficile à comprendre. syslog fait référence à l'enregistrement du système. Le système Windows se trouve dans le collecteur de journaux de l'ordinateur. Linux par défaut est : /etc/syslog.conf
Par défaut, selon la configuration error_log dans php.ini, PHP envoie les enregistrements d'erreurs au système ou au fichier d'enregistrement du serveur. En utilisant la fonction error_log(), vous pouvez envoyer un journal d'erreurs à un fichier spécifié ou à une destination distante. Vous envoyer un message d'erreur par e-mail est un excellent moyen d'être averti d'une erreur spécifiée.
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知网站管理员"; error_log("Error: [$errno] $errstr",1, "someone@example.com","From: webmaster@example.com"); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>La sortie du code ci-dessus est la suivante :
Erreur : [512] La valeur de la variable doit être inférieure ou égale à 1
Avertissez déjà l'administrateur du site Web
L'e-mail reçu du code ci-dessus est le suivant :
Erreur : [512] La valeur de la variable doit être inférieur ou égal à 1Cette méthode ne convient pas à toutes les erreurs. Les erreurs générales doivent être enregistrées sur le serveur à l'aide du système de journalisation PHP par défaut.