PHP et la gestion des erreurs par courriel 
lundi, 6 février 2006, 05:42 AM - PHP, VoiceXML
Lors des séances de tests, il peut être intéressant d'envoyer une alerte par courriel au programmeur si une erreur importante bloque l'affichage d'une page.

Par la même occasion, on peut en profiter pour rediriger le testeur (ou le client si c'est "live"!) vers une autre page du type "Une erreur s'est produite, l'administrateur en a été informé. Cliquez ici pour continuer...".

J'ai trouvé ce code (que j'ai un peu remodelé) sur le site de PHP qui répond bien à ce besoin:

<?php
  $email_admin 
'debug@mon-adresse.com';
  
$link 'http://www.mon-adresse.com/redirection.php';

  
error_reporting (E_ERROR E_WARNING E_NOTICE);

  function 
mailErrorHandler(
              
$errno,
              
$errstr
              
$errfile='?',
              
$errline'?') {

    global 
$email_admin$link;

    
/* fausse erreur? on ignore */
    
if (($errno error_reporting()) == 0)
      return;

    
$err '';
    switch(
$errno) {
      case 
E_ERROR$err 'FATAL'; break;
      case 
E_WARNING$err 'ERROR'; break;
      
/* Les erreurs E_NOTICE ne seront pas signifiées */
      
case E_NOTICE: return;
    }

    
mail($email_admin,
      
"PHP: $errfile$errline"
      
"$errfile, Line $errline\n$err($errno)\n$errstr"); 

    echo 
'<META HTTP-EQUIV="Refresh" CONTENT="0;url='.$link.'">';

    die();
  }

  
set_error_handler('mailErrorHandler'); 
?>



Voici le même code dans un contexte VoiceXML qui prend en considération la langue parlée de l'utilisateur :

<?php
  $email_admin 
'debug@mon-adresse.com';
  
$language_id $_COOKIE['language_id'];
  
/*
    Note: les cookies en VoiceXML sont "stockés"
          du côté serveur
  */

  
error_reporting (E_ERROR E_WARNING E_NOTICE);

  function 
mailErrorHandler(
              
$errno,
              
$errstr
              
$errfile='?',
              
$errline'?') {

    global 
$email_admin$language_id;
    if ((
$errno error_reporting()) == 0)
      return;

    
$err '';
    switch(
$errno) {
      case 
E_ERROR$err 'FATAL'; break;
      case 
E_WARNING$err 'ERROR'; break;
      case 
E_NOTICE: return;
    }

    
mail($email_admin,
      
"PHP: $errfile$errline"
      
"$errfile, Line $errline\n$err($errno)\n$errstr");

    
header ('Content-type: text/xml');

    echo 
'<?xml version="1.0" encoding="ISO-8859-1"?>
      <vxml version="2.0">
      <form>
        <block>
          <prompt>
            <audio src="../audio/'
.$language_id.'/divers_err.wav" />
          </prompt>
          <goto next="menu.php" />
        </block>
      </form>
      </vxml>'
;

     die();
  } 

  
set_error_handler('mailErrorHandler'); 
?>


[ ajout commentaire ]   |  [ 0 trackbacks ]   |  permalink