2010-10-21 5 views
0

Ceci est la partie principale de mon ErrorHandler:ErrorHandler personnalisé ne gère pas les erreurs critiques (php)

function my_error_handler($errno, $errstr, $errfile, $errline){ 
    $errno = $errno & error_reporting(); 
    if($errno == 0) return; 
    if(!defined('E_STRICT'))   define('E_STRICT', 2048); 
    if(!defined('E_RECOVERABLE_ERROR')) define('E_RECOVERABLE_ERROR', 4096); 

    $error = ""; 

    switch($errno){ 
     case E_ERROR:    $error = $error."Error";     break; 
     case E_WARNING:    $error = $error."Warning";    break; 
     case E_PARSE:    $error = $error. "Parse Error";   break; 
     case E_NOTICE:    $error = $error. "Notice";     break; 
     case E_CORE_ERROR:   $error = $error. "Core Error";    break; 
     case E_CORE_WARNING:  $error = $error. "Core Warning";   break; 
     case E_COMPILE_ERROR:  $error = $error. "Compile Error";   break; 
     case E_COMPILE_WARNING:  $error = $error. "Compile Warning";  break; 
     case E_USER_ERROR:   $error = $error. "User Error";    break; 
     case E_USER_WARNING:  $error = $error. "User Warning";   break; 
     case E_USER_NOTICE:   $error = $error. "User Notice";   break; 
     case E_STRICT:    $error = $error. "Strict Notice";   break; 
     case E_RECOVERABLE_ERROR: $error = $error. "Recoverable Error";  break; 
     default:     $error = $error. "Unknown error ($errno)"; break; 
    } 
    $error = " <i>$errstr</i> in <b>$errfile</b> on line <b>$errline</b><br /> \n"; 
    $gi = geoip_open("GeoIP/GeoLiteCity.dat",GEOIP_STANDARD); 

    $ip = ip(); 

    $user = $_SESSION["username"]; 

    $country = geoip_country_name_by_name($gi, $ip);  

    $error .= "User: <b>".$user."</b> Country: <b>".$country."</b> Ip: <b>".$ip."</b> <br /><br /> \n"; 

    //Bruk ip function og kanskje geoip isteden? 

    echo "<p>Something went wrong. It has been logged and will be fixed shortly. Thanks </p>"; 
    //echo $error; 

    log_error_ereg($error); 

    } 

Cela fonctionne bien normalement, mais si je reçois une erreur critique, il montre qu'il montre le nom de fichier php, ce qui a mal etc. Stuff Je veux cacher à l'utilisateur. Comment puis-je inclure ce type d'erreur dans mon gestionnaire d'erreurs? Il semble que mon gestionnaire d'erreurs ne sélectionne pas.

Répondre

1

Votre gestionnaire d'erreurs doit renvoyer true - s'il renvoie false, le gestionnaire d'erreurs par défaut php se poursuit une fois que le vôtre est terminé.

En outre, définissez display_errors false:

ini_set('display_errors', false); 
2

A partir du manuel PHP pour set_error_handler:

Les types d'erreur suivant ne peuvent pas être manipulés avec une fonction définie par l'utilisateur: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING et la plupart des E_STRICT élevés dans le fichier où set_error_handler() est appelé.

Questions connexes