2010-10-21 44 views
0

這是我的ErrorHandler的主要部分:自定義的ErrorHandler不處理嚴重錯誤(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); 

    } 

也能正常工作正常,但如果我得到它顯示了一個嚴重錯誤,它顯示的PHP文件名,出了什麼錯誤等我想隱藏用戶的東西。我如何在我的錯誤處理程序中包含這種類型的錯誤?似乎我的錯誤處理程序不會執行..

回答

1

您的錯誤處理程序需要返回true - 如果它返回false,php默認錯誤處理程序將繼續您的完成。

此外,設置的display_errors爲false:

ini_set('display_errors', false); 
2

從的set_error_han dler PHP手冊:

下面的錯誤類型不能與用戶定義的函數來處理:E_ERROR,E_PARSE,E_CORE_ERROR, E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING和調用set_error_handler()的文件中引發的大部分E_STRICT。