Gérer ses erreurs

Laisser les erreurs de PHP s'afficher sur la page ennuie le visiteur qui trouve que le site est mal fait (il y a "plein" d'erreurs, je vais voir ailleurs!). De plus, afficher les erreurs peut (peut-être) ouvrir une faille pour des pirates. Bref, vous avez tout intérêt à apprendre comment gérer vos erreurs en PHP.

error_reporting();

Error_reporting(); permet de modifier ces fameux raports d'erreurs qui s'affichent lorsqu'il y a une erreur dans votre script. Elle ne prend qu'un argument, le niveau d'erreur. Pour désactiver l'affichage des erreurs sur une page, en première ligne de celle-ci, vous devrez taper ceci:

error_reporting(0);

Ici, la valeur de l'agument était "0" car on ne voulait pas qu'une erreur s'affiche mais il existe d'autres arguments que vous pouvez utiliser. Les voici:
E_ERRORRapporte toutes les erreurs qui ne peuvent pas êtres ignorées et qui stoppent l'exécution du script (oubli d'un ";" par exemple).
E_WARNINGLes alertes n'interrompent pas l'exécution du script. Elles indiquent un problème que renconter le script pendant l'exécution. Par exemple, utiliser un regex invalide.
E_NOTICELes notices indiquent que le script a rencontré quelque chose qui peut être une erreur, mais qui peut aussi être quelque chose de normal, une variable non initialisée par exemple.
E_ALLToutes les erreurs
Il existe encore d'autres arguments, mais ils sont moins importants. Vous pourrez les trouver dans la doc PHP.

Si vous écrivez ceci:

error_reporting(E_NOTICE);

Le script ne rapportera que les notices.

Dans cette fonction, vous pouvez aussi utiliser le symbole "^" pour exclure une catégorie et "|" pour en ajouter une.
Exemple:

error_reporting(E_ALL ^ E_NOTICE);
//Toutes les erreurs s'afficheront sauf les notices.

error_reporting(E_ERROR | E_WARNING);
//Seules les erreurs et les avertissements s'aficheront.


set_error_handler();


Maintenant que vous savez comment afficher seulement certaines erreurs, ou ne pas du tout les afficher, nous allons aller un peu plus loin dans la gestion des erreurs. Set_error_handler(); va renvoyer l'erreur à une fonction de callback. Sa syntaxe sera donc:

set_error_handler('nom_de_la_fonction_de_callback');

A cette fonction, set_error_handler(); va renvoyer quatre valeurs:
-le niveau de l'erreur (nombre)
-le message d'erreur
-le nom du fichier (en addressage complet)
-la ligne où s'est produite l'erreur

Nous allons maintenant créer une fonction qui va récupérer ces valeurs, les mettre dans un mail et l'envoyer au webmaster. Ainsi, vous n'aurez plus besoin de visiter toutes vos pages pour savoir s'il y a des erreurs, vous serez automatiquement prévenu.

Que fait-on du visiteur, on lui affiche quand même la page?


Bien sûr que non, on afficher un petit mot pour lui expliquer de quoi il retourne et puis c'est tout!

: dans la fonction que vous allez créer, les arguments doivent être utilisés dans l'ordre cité ci-dessus. A savoir: le niveau de l'erreur, le message, le fichier puis la ligne.

Commençeons notre fonction:

function gestion_erreur($niveau, $message, $fichier, $ligne){
$date = date('d/m/y   H:i:s');
//On récupère la date pour faire plus précis.

$message = "Bonjour webmaster, \n\n Une erreur est survenue le $date dans le fichier
 $fichier à la ligne $ligne\n\n A+"
;
//On crée le message

$sujet = 'Erreur dans un fichier';
//Ecriture du sujet du mail

$adresse = 'webmaster@site.be';
//L'adresse du webmaster

mail($adresse, $sujet, $message);
//Puis on envoie le mail.

Dans cette partie, on a récupéré les données de l'erreur et on les a envoyé dans un mail au webmaster.

Pourquoi as-tu mis les variables dans le texte sans utiliser la concaténation ($var='texte'.$variable.'suite';)?


Parce que, pour que les "\n" ne s'affichent pas à l'écran et soient interpètés comme des "<br />" dans le mail, j'ai du utiliser des double quotes ("). Lorsqu'on utilise des doubles quotes, il n'est pas nécessaire de "sortir" les variables du texte. En effet, le seveur parcourt tout le message pour vérifier s'il y a des variables à inclure dans le message.

: utilisez le plus possibles des simple quotes (') car elles font moins travailler le seveur (pas de parcourt du texte). Le temps d'exécution de votre page sera donc plus rapide.

Maintenant, on va afficher un petit message au visiteur pour le prévenir qu'il y a eu une erreur sur cette page, on termine la fonction, puis on utilise set_error_handler(); pour envoyer les erreurs (s'il y en a) à notre fonction gestion_erreur();.

echo'Une erreur est survenue lors de l\'exécution du script.  Ne vous en inquiètez pas, le
webmaster a été prévenu automatiquement.<br /><br />Bonne visite.<br />L\'administrateur'
;
//Affichage d'un petit mot au visiteur.

exit;
//On bloque l'exécution du script
}//Fin de la fonction.

set_error_handler('gestion_erreur');

Il vous suffit de placer ce code en haut de chaque page et vous recevrez un mail chaque fois qu'une erreur se sera produite sur votre site.

:Vous pouvez remplacer le petit mot qui s'affiche au visiteur par une "véritable" page d'erreur.


Creative Commons License
Sauf mention contraire, le contenu de cette page est sous licence Creative Commons
Page générée en 0.3474 secondes.
Retour en haut de la page
Imprimer cette page