Exercices
Questions à choix multiple

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
Notes de page

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 : Normalement, quand un script PHP rencontre une erreur : Si ce comportement est acceptable pendant la phase de développement, une fois en production ce comportement n’est pas acceptable :

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 :
ConstantValueDescription
E_ERROR1 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
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)
Gestion des exeptions en PHP5
Nom du fichier : exercises_11/lesson_11_php5_exception.php

Tous droits réservés. 2005-2008