Manuel PHP

Exemples

Ci-dessous, vous trouverez un exemple de gestion des erreurs par PHP. Il y est défini un gestionnaire d'erreur, qui enregistre les informations dans un fichier (au format XML), et envoie un courriel au développeur si l'erreur est critique.

Exemple #1 Gestion d'erreurs avancées en PHP

  1. <?php
  2. // Nous allons faire notre propre gestion
  3. error_reporting(0);  
  4.  
  5. // Fonction spéciale de gestion des erreurs
  6. function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars)  
  7. { 
  8.    // Date et heure de l'erreur
  9.    $dt = date("Y-m-d H:i:s (T)"); 
  10.  
  11.    // Définit un tableau associatif avec les chaînes d'erreur
  12.    // En fait, les seuls niveaux qui nous interessent
  13.    // sont E_WARNING, E_NOTICE, E_USER_ERROR,
  14.    // E_USER_WARNING et E_USER_NOTICE
  15.    $errortype = array ( 
  16.             E_ERROR         => 'Erreur', 
  17.             E_WARNING         => 'Alerte', 
  18.             E_PARSE         => 'Erreur d\'analyse', 
  19.             E_NOTICE         => 'Note', 
  20.             E_CORE_ERROR      => 'Core Error', 
  21.             E_CORE_WARNING   => 'Core Warning', 
  22.             E_COMPILE_ERROR   => 'Compile Error', 
  23.             E_COMPILE_WARNING   => 'Compile Warning', 
  24.             E_USER_ERROR      => 'Erreur spécifique', 
  25.             E_USER_WARNING   => 'Alerte spécifique', 
  26.             E_USER_NOTICE      => 'Note spécifique', 
  27.             E_STRICT         => 'Runtime Notice', 
  28.             E_RECOVERABLE_ERROR => 'Catchable Fatal Error' 
  29.             ); 
  30.    // Les niveaux qui seront enregistrés
  31.    $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); 
  32.    
  33.    $err = "<errorentry>\n"; 
  34.    $err .= "\t<datetime>" . $dt . "</datetime>\n"; 
  35.    $err .= "\t<errornum>" . $errno . "</errornum>\n"; 
  36.    $err .= "\t<errortype>" . $errortype[$errno] . "</errortype>\n"; 
  37.    $err .= "\t<errormsg>" . $errmsg . "</errormsg>\n"; 
  38.    $err .= "\t<scriptname>" . $filename . "</scriptname>\n"; 
  39.    $err .= "\t<scriptlinenum>" . $linenum . "</scriptlinenum>\n"; 
  40.  
  41.    if (in_array($errno, $user_errors)) { 
  42.       $err .= "\t<vartrace>".wddx_serialize_value($vars,"Variables")."</vartrace>\n"; 
  43.    } 
  44.    $err .= "</errorentry>\n\n"; 
  45.    
  46.    // sauvegarde de l'erreur, et mail si c'est critique
  47.    error_log($err, 3, "/usr/local/php4/error.log"); 
  48.    if ($errno == E_USER_ERROR) { 
  49.       mail("phpdev@example.com","Critical User Error",$err); 
  50.    }  
  51. }  
  52.  
  53.  
  54. function distance($vect1, $vect2)  
  55. { 
  56.    if (!is_array($vect1) || !is_array($vect2)) { 
  57.       trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR); 
  58.       return NULL; 
  59.    } 
  60.  
  61.    if (count($vect1) != count($vect2)) { 
  62.       trigger_error("Vectors need to be of the same size", E_USER_ERROR); 
  63.       return NULL; 
  64.    } 
  65.  
  66.    for ($i=0; $i<count($vect1); $i++) { 
  67.       $c1 = $vect1[$i]; $c2 = $vect2[$i]; 
  68.       $d = 0.0; 
  69.       if (!is_numeric($c1)) { 
  70.          trigger_error("Coordinate$iin vector 1 is not a number, using zero", 
  71.                      E_USER_WARNING); 
  72.          $c1 = 0.0; 
  73.       } 
  74.       if (!is_numeric($c2)) { 
  75.          trigger_error("Coordinate$iin vector 2 is not a number, using zero", 
  76.                      E_USER_WARNING); 
  77.          $c2 = 0.0; 
  78.       } 
  79.       $d += $c2*$c2 - $c1*$c1; 
  80.    } 
  81.    return sqrt($d);  
  82. }  
  83.  
  84. $old_error_handler = set_error_handler("userErrorHandler");  
  85.  
  86. // constante non définie, qui génère une alerte
  87. $t = I_AM_NOT_DEFINED;  
  88.  
  89. // définition de quelques vecteurs
  90. $a = array (2, 3, "foo");  
  91. $b = array (5.5, 4.3, -1.6);  
  92. $c = array (1, -3);  
  93.  
  94. // génère une erreur utilisateur
  95. $t1 = distance ($c, $b)."\n";  
  96.  
  97. // génère une erreur utilisateur
  98. $t2 = distance ($b, "i am not an array")."\n";  
  99.  
  100. // Génère une alerte
  101. $t3 = distance ($a, $b)."\n";  
  102.  
  103. ?> 


Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Bretagne - php - Moto - Kit graphique