Gestion des erreurs PHP
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
Lors de la création de scripts et d'applications Web, erreur la manipulation est une partie importante. 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 :
· Simple instruction "die()"
· Erreurs et erreurs personnalisées Déclencheurs
· Rapport d'erreurs
Gestion des erreurs de base : utilisez la fonction die()
Le premier exemple montre un script simple qui ouvre un fichier texte :
<?php $open=fopen('error.txt','r'); echo $open; ?>
Si le fichier n'existe pas, vous obtiendrez une erreur comme celle-ci :
Avertissement : fopen(error.txt) [function.fopen] : échec d'ouverture du flux :
Aucun fichier ou répertoire de ce type dans /www/php/test/test.php en ligne 2
Afin d'éviter que les utilisateurs ne reçoivent des messages d'erreur similaires à celui ci-dessus, nous visitons Fichier avant de vérifier si le fichier existe :
<?php header("Content-type:text/html;charset=utf-8"); if(!file_exists('error.txt')){ die("文件不存在"); }else{ $file=fopen('error.txt','r'); } ?>
Maintenant, si le fichier n'existe pas, vous obtiendrez un message d'erreur comme celui-ci :
Le fichier n'existe pas
Par rapport au code précédent, le code ci-dessus est plus efficace 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) :
fonction_erreur (niveau_erreur, message_erreur, fichier_erreur, ligne_erreur, contexte_erreur)
参数 | 描述 |
error_level | 必需。为用户定义的错误规定错误报告级别。必须是一个数字。参见下面的表格:错误报告级别。 |
error_message | 必需。为用户定义的错误规定错误消息。 |
error_file | 可选。规定错误发生的文件名。 |
error_line | 可选。规定错误发生的行号。 |
error_context | 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。 |
Niveaux de rapport d'erreurs
Ces niveaux de rapport d'erreurs sont gérés par des gestionnaires d'erreurs définis par l'utilisateur. Différents types d'erreurs :
| <🎜>Constante<🎜>< 🎜> | <🎜> Description<🎜><🎜> | |||||||||||||||
2 | E_WARNING | Exécution non fatale -erreur de temps. Ne suspendez pas l’exécution du script. | |||||||||||||||
<🎜 > <🎜><🎜> 8<🎜><🎜> | <🎜> <🎜><🎜>E_NOTICE<🎜> | notification d'exécution. 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<🎜> <🎜> | utilisateur fatal erreurs générées. 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(). |
| <🎜> ><🎜> <🎜>E_USER_NOTICE<🎜> | 用户生成Le PHP utilise trigger_error() pour E_NOTICE. | |||||||||
<🎜> <🎜><🎜> 4096<🎜><🎜> | <🎜> ><🎜><🎜> <🎜><🎜>E_RECOVERABLE_ERROR<🎜> | valign= "top" style="border-width: 1px; style de bordure : solide ; word-break: break-all;"><🎜> <🎜><🎜> 8191<🎜><🎜> | <🎜> <🎜><🎜>E_ALL<🎜> | 所有错误和警告。(在 PHP 5.4 中,E_STRICT et E_ALL 的一部分) |
Maintenant, créons une fonction qui gère les erreurs :
<?php header("Content-type:text/html;charset=utf-8"); function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } ?>
Le code ci-dessus est un 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 intégré gestionnaire d'erreurs. 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");
Depuis nous voulons que notre fonction personnalisée gère 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
Nous combinons les connaissances que nous avons apprises ci-dessus et essayons de générer des variables inexistantes pour tester ce gestionnaire d'erreurs :
<?php header("Content-type:text/html;charset=utf-8"); // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 设置错误处理函数 set_error_handler("customError"); // 触发错误 echo($test); //关闭了所有的错误显示 error_reporting(0); //显示所有错误 //error_reporting(E_ALL); //显示所有错误,但不显示提示 //error_reporting(E_ALL & ~ E_NOTICE); ?>
Résultat de l'exécution du programme :
Erreur : [8] Variable non définie : test
Le résultat de l'exécution nous indique que le niveau d'erreur est 8 , et le message d'erreur est : Une variable inexistante
déclenche une erreur
où l'utilisateur saisit des données dans le script, 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 header("Content-type:text/html;charset=utf-8"); $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
Résultat de l'exécution du programme :
Remarque : La valeur de la variable doit être inférieure ou égale à 1 dans D:WWWAdvanced tutorielerrorerror_1.php en ligne 6
Vous pouvez déclencher des erreurs n'importe où dans le script, et en ajoutant un deuxième paramètre, vous pouvez spécifier le niveau d'erreur qui est déclenché.
Types d'erreurs possibles :
· 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.
· E_USER_WARNING - Avertissement d'exécution non fatal généré par l'utilisateur. L'exécution du script n'est pas interrompue.
· 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", l'erreur E_USER_WARNING se produit. Si E_USER_WARNING se produit, nous utiliserons notre gestionnaire d'erreurs personnalisé et terminerons le script :
<?php header("Content-type:text/html;charset=utf-8"); // 错误处理函数 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); } ?>
Résultat de l'exécution du programme :
Erreur : [512] La valeur de la variable doit être inférieure à ou égal à 1
Le script se termine
Le résultat de l'exécution nous indique que la valeur du niveau d'erreur est 512. Le message d'erreur devient le message d'invite que nous avons défini avec la fonction trigger_error
Journalisation des erreurs
Dans certaines entreprises, il existe des systèmes spéciaux de collecte de journaux. Le système de collecte de journaux vous aidera silencieusement à collecter les erreurs, les avertissements et les invites en coulisse.
Certaines entreprises ne disposent pas non plus d'un système de collecte de journaux dédié et collectent les journaux en cours d'exécution à partir du serveur via des fichiers.
Parmi eux : les erreurs et avertissements PHP doivent être reçus.
Ensuite, la question se pose : si le niveau de rapport d'erreurs est défini bien avant que les utilisateurs puissent le voir, comment collecter les erreurs dans le système de journalisation ?
Voici les éléments de configuration pertinents qui doivent être utilisés dans php.ini. Ces deux éléments de configuration sont :
| <🎜><🎜> Description<🎜><🎜> td > | ||||||||
0 | Envoyer à l'emplacement spécifié par défaut du journal d'erreurs | < / tr>||||||||
1 | Envoyer à l'emplacement de messagerie spécifié | 3 | Envoyer à l'emplacement de fichier spécifié | < / tableau>