Vous êtes sur la page 1sur 5

Notes de page

Leçon N° 11 : Gestion des erreurs

Introduction
Théorie : type d'erreurs
Tests : messages d'erreurs
Utilisation de la fonction error_reporting()
Utilisation de la fonction set_error_handler()
Nouvelles fonctionalités PHP5

Introduction

Comme dans tout langage de programmation, PHP possède toute


une structure permettant de gérer les erreurs, qui peuvent être de
différents types :

Erreur de syntaxe lors de la compilation du programme


Erreur d’exécution lors de l’exécution du programme
Erreur de données : donnée innatendue, incompatible
avec les routines développées pour son traitement (lettre
dans un nombre représentant une quantité, …)

Normalement, quand un script PHP rencontre une erreur :

un message s’affiche indiquant (en anglais bien sur) le


degré de gravité de l’erreur, la cause de l'erreur, le nom du
fichier de scrip la ligne du script où l’erreur s’est produite.
selon la gravité de l’erreur, l'exécution du script se termine
à l’endroit de l’erreur, ou simplement une ligne du script ne
s’exécute pas, ou toutes les lignes peuvent néanmoins
s’exécuter

Si ce comportement est acceptable pendant la phase de


développement, une fois en production ce comportement n’est pas
acceptable :

Le message doit être autant que possible dans la langue


de l’utilisateur
Outre cela, l’utilisateur, qui n’a d’une part assez souvent
aucune notion de programation, d’autre part n’a pas accès
au script, n’a que faire du message d’erreur tel qu’il est
délivré par PHP (nom de fichier, N° de ligne…)
Il sera donc necessaire d’adapter le message éventuel à
l’environnement, et aussi en général d’enregistrer l’erreur
dans un fichier « de log » permettant au responsable du
site d’apporter les corrections eventuelles à postériori
pour éviter qu’elle ne se reproduise.

Théorie : type d'erreurs

Il y a trois types d'erreurs en théorie dans PHP:


1. Notices: Erreurs non critiques, par défaut non affichées.
Toutes les instructions ont néanmoins pu être exécutées
2. Warnings: Une instruction n'a pu être correctement
éxécutée (ex:fichier manquant...), neanmoins le script
peut continuer son exécution.
3. Fatal errors: Erreurs fatales : le script s'arrète : erreur de
syntaxe...

Ces erreurs peuvent être générées au chargement de la page, au


moment du décodage ou à l'execution
Voir ci-après la description de la fonction error_reporting et la liste
des valeurs possibles en argument

Tests des messages d'erreurs

Erreur de type Notice:


Exemple de message de "Notice"
Nom du fichier : exercises_11/lesson_11_a0_notice.php
Erreur de type Warning
Exemple de message de "Warning"
Nom du fichier : exercises_11/lesson_11_a_warning.php
Erreur de type Fatal error
Exemple de message "Fatal error"
Nom du fichier : exercises_11/lesson_11_b_fatal.php

Fonction error_reporting()

La fonction error_reporting définit le niveau d'erreur pour lequel le


serveur doit renvoyer une erreur.
Elle renvoie la valeur précédemment en usage.
L'argument niveau correspond à un "bitfield" (utiliser l'opérateur
bitwise OR pour indiquer les types de rapport d'erreurs désirées.
Par défaut, PHP utilise le niveau 7 (1 OR 2 OR 4)
(Fatal,Warning,Parse) PHP4 recommande l'utilisation des constantes
et non des valeurs : Valeurs possibles :
Constant Value Description
E_ERROR 1 Fatal runtime error

E_WARNING 2 Non-fatal runtime error

E_PARSE 4 Runtime parse error

E_NOTICE 8 Non-fatal runtime notice

E_CORE_ERROR 16 Fatal startup error

E_CORE_WARNING 32 Non-fatal startup error

E_COMPILE_ERROR 64 Fatal compile-time error

E_COMPILE_WARNING 128 Non-fatal compile-time error

E_USER_ERROR 256 User-triggered fatal error

E_USER_WARNING 512 User-triggered non-fatal error

E_USER_NOTICE 1024 User-triggered notice

E_ALL All of the above


Exemples :
<?
error_reporting(0);// Empêche tout affichage d'erreur
......
error_reporting(7); // Ancienne syntaxe PHP 2/3 : parse+warning+fatal
......
error_reporting(E_ERROR | E_WARNING | E_PARSE);//Nouvelle syntaxe, appropriée pour
erreurs courantes d'execution
......
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);//Appropriée pour
erreurs de développement
......
?>
Exemples d'utilisation de la fonction error_reporting()
Nom du fichier : exercises_11/lesson_11_c0_error_reporting_function.php
Exemples d'utilisation de la fonction error_reporting()
Nom du fichier : exercises_11/lesson_11_c1_error_reporting_function.php
Exemples d'utilisation de la fonction error_reporting()
Nom du fichier : exercises_11/lesson_11_c2_error_reporting_function.php
Par défaut, sur les serveurs apache sous Linux, PHP 4.x ext
configuré pour reporter toutes les erreurs excépté les erreurs
E_NOTICE, cependant, ceci peut être modifié par le fichier de
configuration php.ini.
D'autre part, certains opérateurs prévalent sur le fonctionnement
normal de la gestion d'erreur : on se souvient que le @ devant un
appel de fonction annulle tout message d'erreur :
Cas du @
exercises_11/lesson_11_c3_error_reporting_function.php
Un appel de cette fonction sans arguments renvoie le niveau en
cours de reporting :
Error_reporting sans argument
Nom du fichier : exercises_11/lesson_11_c4_error_reporting_function.php
Utilisation de la fonction set_error_handler()

Le comportement ci-dessus convient pour des petits programmes.


Pour des applications plus complexes, on a souvent besoin d'avoir
une gestion plus personnalisée des erreurs.
C'est ce que propose la fonction set_error_handler() qui permet d'écrire
soi-même la gestion d'erreur.
La fonction set_error_handler() accepte un seul argument: le nom la
fonction à appeler lorsqu'une erreur se produit.

Cette seconde fonction définie par l'utilisateur doit être


capable d'accepter au minimum deux arguments:
1. Le type d'erreur et
2. Le message descriptif correspondant,
et trois arguments facultatifs
3. Un nom de fichier
4. La ligne ou l'erreur s'est produite,
5. le contenu de la variable au moment de l'erreur.

Voir l'exemple suivant :


Fonctionnement de la fonction "set_error_handler"
Nom du fichier : exercises_11/lesson_11_d_set_error_handler_function_1.php
Une technique consiste a construire le message en fonction du type
d'erreur:
Exemple pratique d'utilisation de la fonction "set_error_handler"
Nom du fichier : exercises_11/lesson_11_e_set_error_handler_function_2.php
Lorsque les deux fonctions sont utilisées au sein du même script
PHP assume que tous les types d'erreur définis dans la fonction
error_reporting() seront gérées par le le handler spécifique fourni, sauf
les types d'erreur E_ERROR, E_PARSE, E_COMPILE et E_CORE.
Mix "set_error_handler()" et "error_reporting() exemple N° 2
Nom du fichier : exercises_11/lesson_11_f_set_error_handler_function_3.php
On voit que dans ce cas l'erreur fatale n'est pas gérée par le handler.
Mix "set_error_handler()" et "error_reporting() exemple N° 3
Nom du fichier : exercises_11/lesson_11_g_set_error_handler_function_4.php

Les gros avantages de pouvoir capter soi-même les


erreurs sont donc :
Traduction dans le language local
Traduction dans une forme comprehensibles par
l'utilisateur
Ecriture dans un log :

Exemple d'ecriture d'un log


Nom du fichier : exercises_11/lesson_11_h_set_error_handler_function_5.php

Nouvelles fonctionalités PHP5 concernant la gestion


d'erreurs

Il s'agit de la gestion d'erreur à utiliser dans la programmation


"objets" (classes) Ce système permet de définir des blocs de code à
l'intérieur desquels l'apparition des erreurs est "surveillée". A
l'intérieur de cette zone les erreurs sont appelées "exeptions", et une
classe "Exception" est fournie à partir de laquelle les classes de
gestion d'erreur peuvent être étendues (voir exemple ci-après)

Trois mots-clés à connaître :


try Marque le début du bloc de code à "surveiller"
throw Provoque le déclenchement de l'exeption
catch Marque le début de la routine qui s'exécute lorsque
l'exeption se produit

Gestion des exeptions en PHP5


Nom du fichier : exercises_11/lesson_11_php5_exception.php

Tous droits réservés. 2005-2020