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:
- Notices: Erreurs non critiques, par défaut non affichées.
Toutes les instructions ont néanmoins pu être exécutées
- Warnings: Une instruction n'a pu être correctement éxécutée
(ex:fichier manquant...), neanmoins le script peut continuer
son exécution.
- 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);
......
error_reporting(7);
......
error_reporting(E_ERROR | E_WARNING | E_PARSE);
......
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
......
?>
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:
- Le type d'erreur et
- Le message descriptif correspondant,
et trois arguments facultatifs
- Un nom de fichier
- La ligne ou l'erreur s'est produite,
- 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
|
|