Voir la page Facebook de Dewep.net Voir la page Google Plus de Dewep.net Voir la page Twitter de Dewep.net

Tutoriel - Gestion des erreurs PHP

CC BY-NC-SA 3.0

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