Gestion des erreurs PHP
- Page précédente E-mail sécurisé PHP
- Page suivante Exception PHP
Dans PHP, la gestion des erreurs par défaut est simple. Un message est envoyé au navigateur, ce message contient le nom de fichier, le numéro de ligne et un message de description de l'erreur.
Gestion des erreurs PHP
Lors de la création de scripts et d'applications web, la gestion des erreurs est une partie importante. Si votre code manque de code de détection des erreurs, le programme semble peu professionnel et ouvre des portes à des risques de sécurité.
Ce tutoriel présente certaines des méthodes de détection des erreurs les plus importantes en PHP.
Nous vous expliquerons différentes méthodes de gestion des erreurs :
- Instruction simple "die()"
- Erreurs personnalisées et déclencheurs d'erreur
- Rapport d'erreur
Gestion de base des erreurs : utilisation de la fonction die()
Premier exemple d'un script simple pour ouvrir un fichier texte :
<?php $file=fopen("welcome.txt","r"); ?>
Si le fichier n'existe pas, vous obtiendrez un message d'erreur similaire à celui-ci :
Avertissement: fopen(welcome.txt) [fonction.fopen]: échec de l'ouverture du flux: Aucun fichier ou dossier trouvé dans C:\webfolder\test.php à la ligne 2
Pour éviter que l'utilisateur ne reçoive un message d'erreur similaire à celui ci-dessus, nous vérifions l'existence du fichier avant d'y accéder :
<?php if(!file_exists("welcome.txt")) { die("Fichier introuvable"); } else { $file=fopen("welcome.txt","r"); } ?>
Maintenant, si le fichier n'existe pas, vous obtiendrez un message d'erreur similaire à celui-ci :
Fichier introuvable
Compared to the previous code, the code above is more efficient because it uses a simple error handling mechanism to terminate the script after the error.
Cependant, il n'est pas toujours approprié de simplement arrêter le script. Laissons-nous examiner 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 lorsque des erreurs se produisent en PHP.
Cette 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 (optionnels : fichier, numéro de ligne et contexte d'erreur) :
Syntaxe
error_function(error_level, error_message, error_file, error_line, error_context)
Paramètres | Description |
---|---|
error_level | Obligatoire. Définit le niveau de rapport d'erreur pour les erreurs définies par l'utilisateur. Doit être une valeur numérique. Voir le tableau suivant : niveau de rapport d'erreur. |
error_message | Obligatoire. Définit les messages d'erreur pour les erreurs définies par l'utilisateur. |
error_file | Optionnel. Définir le nom du fichier où l'erreur s'est produite. |
error_line | Optionnel. Définir le numéro de ligne où l'erreur s'est produite. |
error_context | Optionnel. Définir un tableau contenant chaque variable utilisée lors de l'erreur et leurs valeurs. |
Niveau de rapport d'erreur
Ces niveaux de rapport d'erreur sont différents types d'erreurs que le gestionnaire d'erreurs vise à traiter :
Valeur | Constante | Description |
---|---|---|
2 | E_WARNING | Erreurs non fatales au niveau d'exécution. Ne pas arrêter l'exécution du script. |
8 | E_NOTICE | Notifications au niveau d'exécution. Le script découvre qu'une erreur pourrait se produire, mais cela pourrait également se produire pendant l'exécution normale du script. |
256 | E_USER_ERROR | Erreurs générées par l'utilisateur fatales. Similaires aux E_ERROR définis par le programmeur en utilisant la fonction PHP trigger_error(). |
512 | E_USER_WARNING | Avertissements non fataux générés par l'utilisateur. Similaires aux E_WARNING définis par le programmeur en utilisant la fonction PHP trigger_error(). |
1024 | E_USER_NOTICE | Notifications générées par l'utilisateur. Similaires aux E_NOTICE définies par le programmeur en utilisant la fonction PHP trigger_error(). |
4096 | E_RECOVERABLE_ERROR | Erreurs fatales capturables. Similaires à E_ERROR, mais capturables par un gestionnaire d'erreurs personnalisé défini par l'utilisateur. (Voir set_error_handler()). |
8191 | E_ALL | Toutes les erreurs et les avertissements, sauf le niveau E_STRICT. (Dans PHP 6.0, E_STRICT fait partie de E_ALL) |
Maintenant, créons une fonction pour gérer les erreurs :
function customError($errno, $errstr) { echo "<b>Erreur:</b> [$errno] $errstr<br />"; echo "Fin du script"; die(); }
Le code ci-dessus est une fonction de gestion des erreurs simple. Lorsqu'elle est déclenchée, elle récupère le niveau d'erreur et le message d'erreur. Ensuite, elle affiche le niveau et le message d'erreur, et arrête l'exécution du script.
Maintenant que nous avons créé une fonction de gestion des erreurs, nous devons déterminer quand déclencher cette fonction.
Définir un gestionnaire d'erreurs
Le gestionnaire d'erreurs par défaut de PHP est le gestionnaire intégré. Nous avons l'intention de transformer la fonction ci-dessus en gestionnaire d'erreurs par défaut pendant l'exécution du script.
Il est possible de modifier le gestionnaire d'erreurs pour qu'il ne s'applique qu'à certaines erreurs, ce qui permet au script de traiter différemment chaque type d'erreur. Cependant, dans cet exemple, nous avons l'intention d'utiliser notre gestionnaire d'erreurs personnalisé pour toutes les erreurs :
set_error_handler("customError");
Comme nous souhaitons que notre fonction personnalisée traite toutes les erreurs, set_error_handler() nécessite uniquement un paramètre, mais un second peut être ajouté pour définir le niveau d'erreur.
Exemple
Pour tester ce gestionnaire d'erreurs, essayons de sortir une variable inexistante :
<?php //fonction gestionnaire d'erreur function customError($errno, $errstr) { echo "<b>Erreur :</b> [$errno] $errstr"; } //set error handler set_error_handler("customError"); //trigger error echo($test); ?>
La sortie du code ci-dessus devrait être similaire à cela :
Erreur : [8] Variable non définie : test
Déclencher une erreur
À l'endroit où les utilisateurs saisissent des données dans le script, il est utile de déclencher des erreurs lorsque les données saisies par l'utilisateur sont invalides. En PHP, cette tâche est réalisée par 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("La valeur doit être 1 ou inférieure"); } ?>
La sortie du code ci-dessus devrait être similaire à cela :
Avis : La valeur doit être 1 ou inférieure in C:\webfolder\test.php on line 6
Vous pouvez déclencher une erreur à tout moment dans le script, en spécifiant le niveau de l'erreur via le second paramètre.
Types d'erreurs possibles :
- E_USER_ERROR - erreur run-time fatale générée par l'utilisateur. L'erreur ne peut pas être récupérée. L'exécution du script est interrompue.
- E_USER_WARNING - avertissement run-time non fatal généré par l'utilisateur. L'exécution du script n'est pas interrompue.
- E_USER_NOTICE - par défaut. Notification run-time générée par l'utilisateur. Le script a détecté une éventuelle erreur, qui 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 une E_USER_WARNING se produit, nous utiliserons notre gestionnaire d'erreurs personnalisé et terminerons le script :
<?php //fonction gestionnaire d'erreur function customError($errno, $errstr) { echo "<b>Erreur:</b> [$errno] $errstr<br />"; echo "Fin du script"; die(); } //set error handler set_error_handler("customError",E_USER_WARNING); //trigger error $test=2; if ($test>1) { trigger_error("La valeur doit être 1 ou inférieure",E_USER_WARNING); } ?>
La sortie du code ci-dessus devrait être similaire à cela :
Erreur: [512] La valeur doit être 1 ou inférieure Fin du script
Maintenant que nous avons appris à créer nos propres erreurs et à les déclencher, examinons maintenant la journalisation des erreurs.
Journalisation des erreurs
Par défaut, selon la configuration de error_log dans php.ini, PHP envoie des journaux d'erreur au système de journalisation des erreurs du serveur ou au fichier. En utilisant la fonction error_log(), vous pouvez envoyer des journaux d'erreur à un fichier ou à une destination distante spécifiée.
Envoyer un message d'erreur à vous-même par e-mail est une bonne méthode pour obtenir une notification d'erreur spécifique.
Envoyer un message d'erreur par E-Mail
Dans l'exemple suivant, si une erreur spécifique se produit, nous enverrons un e-mail avec le message d'erreur et terminerons le script :
<?php //fonction gestionnaire d'erreur function customError($errno, $errstr) { echo "<b>Erreur:</b> [$errno] $errstr<br />"; echo "Le webmaster a été informé"; error_log("Erreur: [$errno] $errstr",1, "someone@example.com","From: webmaster@example.com"); } //set error handler set_error_handler("customError",E_USER_WARNING); //trigger error $test=2; if ($test>1) { trigger_error("La valeur doit être 1 ou inférieure",E_USER_WARNING); } ?>
La sortie du code ci-dessus devrait être similaire à cela :
Erreur: [512] La valeur doit être 1 ou inférieure Le webmaster a été informé
Les e-mails reçus à partir du code ci-dessus sont similaires à cela :
Erreur: [512] La valeur doit être 1 ou inférieure
Cette méthode ne convient pas à tous les erreurs. Les erreurs courantes devraient être enregistrées sur le serveur en utilisant le système de journalisation PHP par défaut.
- Page précédente E-mail sécurisé PHP
- Page suivante Exception PHP