PHP Gestion des erreurs
En PHP, le traitement d'erreur par défaut est très simple. Un message d'erreur est envoyé au navigateur, le message avec le nom du fichier, le numéro de ligne et une description du message d'erreur.
PHP Gestion des erreurs
Lors de la création de scripts et des applications Web, la gestion des erreurs est une partie importante. Si votre code manque erreur code de vérification, votre programme peut paraître très professionnel, mais ouvre également la porte à des risques de sécurité.
Ce tutoriel présente quelques-uns de la méthode la plus importante en PHP de détection d'erreur.
Nous allons vous expliquer vos différentes méthodes de traitement des erreurs:
- Simple "die ()" déclaration
- les erreurs de mesure et les déclencheurs d'erreur
- Rapport d'erreurs
Gestion des erreurs de base: Utilisation de la matrice function ()
Le premier exemple montre un script simple qui ouvre un fichier texte:
<?php $file=fopen("welcome.txt","r"); ?>
Si le fichier n'existe pas, vous obtiendrez une erreur comme ceci:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /www/w3big/test/test.php on line 2
Pour empêcher les utilisateurs d'obtenir un message d'erreur similaire à ce qui précède, nous avons examiné le fichier avant d'accéder au fichier existe:
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>
Maintenant, si n'existe pas le fichier, vous obtiendrez ce message d'erreur semblable à:
文件不存在
Par rapport au code précédent, le code ci-dessus est plus efficace, car il utilise un mécanisme de gestion des erreurs simples à mettre fin au script après l'erreur.
Cependant, mettre fin à tout simplement le script est pas toujours dans le bon sens. Penchons-nous sur les fonctions PHP alternatives pour les erreurs de manipulation.
Création d'un gestionnaire d'erreurs personnalisé
Créez un gestionnaire d'erreur personnalisé est assez simple. Nous créons simplement une fonction spéciale qui peut être appelée lorsqu'une erreur se produit en PHP.
Cette fonction doit être capable de traiter au moins deux paramètres (niveau d'erreur et de message d'erreur), mais peut accepter jusqu'à cinq paramètres (éventuellement: fichier, ligne numéro et le contexte d'erreur):
grammaire
error_function(error_level,error_message, error_file,error_line,error_context)
Paramètres | description |
---|---|
error_level | Obligatoire. Erreur est défini comme un niveau de rapport d'erreur défini par l'utilisateur. Il doit être un nombre. Voir le tableau suivant: niveau de rapport d'erreur. |
error_message | Obligatoire. message d'erreur erreur définie par l'utilisateur indiqué. |
ERROR_FILE | Optionnel. Nom du fichier erreur spécifiée est survenue. |
ERROR_LINE | Optionnel. numéro de ligne prédéterminée l'erreur est survenue. |
error_context | Optionnel. Indique un tableau contenant toutes les variables lorsqu'une erreur se produit en cours d'utilisation et de leurs valeurs. |
niveau de rapport d'erreur
Ces niveaux de rapport d'erreur sont les différents types d'erreurs erreur de traitement personnalisé Handler:
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE | run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL | 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
Maintenant, nous allons créer une fonction pour gérer les erreurs:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); }
Le code ci-dessus est une simple fonction de gestion des erreurs. Quand il est déclenché, il va obtenir le niveau d'erreur et les messages d'erreur. Il délivre alors le niveau d'erreur et le message et termine le script.
Maintenant, nous avons créé une fonction de gestion des erreurs, nous devons déterminer quand déclencher la fonction.
Réglage de gestionnaire d'erreurs
Le gestionnaire d'erreurs par défaut de PHP est un gestionnaire d'erreurs intégré. Nous allons transformer la fonction ci-dessus la durée du gestionnaire d'erreur par défaut du script.
Vous pouvez modifier le gestionnaire d'erreurs de sorte qu'il applique uniquement à une erreur, de sorte que le script peut être différentes façons de gérer les différentes erreurs. Cependant, dans ce cas, nous avons l'intention d'utiliser pour toutes Handler erreurs d'erreur notre personnalisé:
set_error_handler("customError");
Puisque nous voulons que notre fonction personnalisée pour gérer toutes les erreurs, set_error_handler () nécessaire seulement un paramètre, vous pouvez ajouter un second argument pour spécifier un niveau d'erreur.
Exemples
En essayant de variable de sortie qui n'existe pas, pour tester le gestionnaire d'erreur:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 设置错误处理函数 set_error_handler("customError"); // 触发错误 echo($test); ?>
La sortie du code ci-dessus est la suivante:
Error: [8] Undefined variable: test
Trigger erreur
Dans le script, les données d'emplacement d'entrée de l'utilisateur lors de l'entrée utilisateur n'a pas été déclenchée lorsqu'une erreur est utile. En PHP, cela se fait par la fonction trigger_error () pour terminer.
Exemples
Dans cet exemple, si la variable "test" est supérieur à "1", une erreur se produit:
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
La sortie du code ci-dessus est la suivante:
Notice: 变量值必须小于等于 1 in /www/test/w3big.php on line 5
Vous pouvez déclencher une erreur dans le script où, en ajoutant un second paramètre, vous pouvez spécifier le niveau d'erreur est déclenchée.
types d'erreurs possibles:
- E_USER_ERROR - Fatal erreur d'exécution généré par l'utilisateur. Erreur irrécupérable. L'exécution du script est interrompue.
- E_USER_WARNING - avertissement d'exécution généré par l'utilisateur non-fatal. L'exécution du script ne soit pas interrompue.
- E_USER_NOTICE - par défaut. Généré par l'utilisateur préavis d'exécution. Lorsque le script a détecté une erreur peut se produire, mais peut également se produire dans le script de fonctionnement normal.
Exemples
Dans cet exemple, si la variable "test" est supérieur à "1", une erreur se produit E_USER_WARNING. Si cela se produit E_USER_WARNING, nous allons utiliser notre gestionnaire d'erreur personnalisé et à la fin du 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 est la suivante:
Error: [512] 变量值必须小于等于 1 脚本结束
Maintenant que nous avons appris comment créer votre propre erreur, et comment les déclencher, regardons le journal des erreurs.
Error Log
En cas de défaut, selon la configuration de error_log est définie dans le php.ini, PHP envoie un système d'enregistrement d'erreur d'enregistrer ou de serveur de fichiers. En utilisant le error_log () la fonction que vous pouvez envoyer des journaux d'erreurs dans un fichier spécifié ou une destination distante.
Il envoie un message d'erreur pour vous par e-mail est un bon moyen pour être averti des erreurs spécifiques.
Message d'erreur est envoyé par e-mail
Dans l'exemple suivant, si une erreur spécifique se produit, nous vous enverrons un e-mail avec un message d'erreur et terminer le script:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知网站管理员"; error_log("Error: [$errno] $errstr",1, "[email protected]","From: [email protected]"); } // 设置错误处理函数 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:
Error: [512] 变量值必须小于等于 1 已通知网站管理员
Les messages reçus du code ci-dessus est la suivante:
Error: [512] 变量值必须小于等于 1
Cette méthode ne convient pas à toutes les erreurs. erreur conventionnelle devrait être en utilisant le système d'enregistrement de PHP par défaut pour l'enregistrement sur le serveur.