Tutoriel - Gestion des erreurs PHP
L'ensemble des tutoriels est soumis à la licence CC BY-NC-SA 3.0 (Code Juridique).
Vous êtes donc libre de remixer et partager l'oeuvre aux conditions de l'attribuer (lien vers cette page), de ne pas l'utiliser à des fins commerciales, et de la partager avec une licence identique ou similaire.
Comment gérer les erreurs PHP ? Lors de la phase de développement, il est indispensable de voir les erreurs que retourne PHP, cela permet de les corriger.
Cependant, lorsque le site est en ligne, mieux vaut que les erreurs ne s'affichent pas, principalement pour des raisons de sécurité (et d'esthétique : ce n'est pas beau une erreur au milieu de la page).
Créer des erreurs volontairement
Nous allons préparer notre fichier PHP pour tester le bon fonctionnement.
Nous allons donc volontairement créer 3 types d'erreurs :
- Le type notice : Ce sont plus des remarques que des erreurs PHP. Par défaut, elles ne sont pas affichées. Ce sont par exemple des erreurs de variables non déclarées.
- Le type avertissement : C'est un problème que rencontre PHP. Par exemple, diviser un nombre par 0 est un avertissement.
- Le type erreur : Ce sont des erreurs fatales, le script est interrompu. Les erreurs ne peuvent pas être ignorées, comme des problèmes d'allocation de mémoire.
Voilà notre code PHP intégrant trois erreurs (le type
erreur n'est pas présent) :
Gestion des erreurs
set_error_handler
Première étape, on appelle une fonction (que l'on nommera
gestionDesErreurs) à chaque fois que le script rencontre une erreur.
Pour cela, nous allons utiliser la fonction
set_error_handler :
Ce code doit bien entendu être placé au début du script (donc avant les erreurs).
Il nous faut maintenant créer notre fonction
gestionDesErreurs qui sera appelée à chaque fois.
Elle doit prendre en paramètres :
- Le premier paramètre, qui est obligatoire, contient le niveau d'erreur.
- Le second paramètre, qui est aussi obligatoire, contient le message d'erreur.
- Le troisième paramètre, facultatif, contient le nom du fichier dans lequel l'erreur a été commise.
- Le quatrième paramètre, facultatif aussi, contient le numéro de la ligne à laquelle l'erreur a été rencontrée.
- Le cinquième paramètre, facultatif, contenant un tableau avec toutes les variables qui existaient lorsque l'erreur a été déclenchée. Ce n'est pas très utile, et nous ne l'utiliserons pas ici.
Ce qui nous donne :
gestionDesErreurs
Vous l'avez peut être remarqué,
$type est un nombre.
En fait, c'est une constante.
Vous trouverez la liste de ces constantes ici :
http://fr.php.net/manual/fr/errorfunc.constants.php.
Nous n'allons utiliser que les principaux types, vous ne devriez jamais rencontrer les autres erreurs :
Ce qui nous donne :
Ici, je ne fais qu'afficher l'erreur. Donc il y a peu de différence avec le code de départ.
Les intérêts de faire une fonction pour gérer les erreurs peuvent être :
- Envoyer les erreurs par mail à l'administrateur/webmaster
- Sauvegarder ces erreurs dans une base de données
- ...
error_reporting
Maintenant, il va falloir cacher les erreurs, car certaines (tel que le require) s'affiche encore.
La première solution est de modifier la configuration de PHP temporairement :
Cela masquera toutes les erreurs.
Cependant, sur certains hébergeurs, cette fonction n'est pas possible.
Je vous conseille alors d'utiliser :
Cela définie le niveau d'erreur. Si c'est 0, aucune erreur ne sera traitée.
Vous pouvez changer le 0 en une constante (
http://fr.php.net/manual/fr/errorfunc.constants.php), en fonction de vos besoins.
La fonction
set_error_handler ne prenant pas en compte
error_reporting, les erreurs seront bien toujours gérées, même si
error_reporting vaudra 0 ; elles ne seront juste plu affichées.
Gestion des exceptions
Nous avons vu pour gérer les erreurs PHP.
Cependant, il peut aussi y avoir des erreurs types exceptions.
Nous allons rediriger ces exceptions vers notre fonction
gestionDesErreurs.
Tout d'abord, même procéder que
set_ error_ handler, mais avec
set_exception_handler :
Nous créons maintenant notre fonction
gestionDesExceptions, qui va renvoyer vers la fonction
gestionDesErreurs.
Nous allons utiliser le type
E_USER_ERROR :
Code complet
Voici le code complet :
Ce code est, je le rappelle, à placer au début de la page.
Remarques / Suppléments
Éviter les require
Maintenant, il va falloir que vous évitiez les require.
En effet, pour les require, si le fichier n'existe pas, le script est arrêté, et ce, même si votre fonction
gestionDesErreurs n'a pas d'
exit.
trigger_error
La fonction
trigger_error vous permet de déclencher des erreurs.
Cela peut vous êtes très pratique.
Cette fonction prends 2 paramètres :
- Le premier paramètre est le message d'erreur, au format string.
- Le second paramètre est le type d'erreur (E_USER_ERROR, E_USER_WARNING, ...)
Un exemple :
Renverra :
La fonction
user_ error est un alias de cette fonction.
Compléments d'informations
Vous pouvez trouver d'autres informations sur la gestion des erreurs sur
php.net.
Questions / Remarques / Améliorations ?
N'hésitez pas à me contacter pour toutes questions / remarques / ou amélioration :
http://dewep.net/Contact