0

私はnettutsから次のスクリプトを使用しています:

// Our custom error handler  
function error_engine($number, $message, $file, $line, $vars)  

{  
    $email = " 
        <p>An error ($number) occurred on line  
        <strong>$line</strong> and in the <strong>file: $file.</strong>  
        <p> $message </p>";  

    $email .= "<pre>" . print_r($vars, 1) . "</pre>";  

    $headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  

    // Email the error to someone...  
    error_log($email, 1, 'example@example.com', $headers);  


    if ( ($number !== E_NOTICE) && ($number < 2048) ) {  
        die("There was an error. Please try again later.");  
    }  
}  

// We should use our custom function to handle errors.  
set_error_handler('error_engine'); 

通知や警告などには問題なく機能しますが、「mysqli_connect」を「mysqy_connct」に変更するなどして意図的にスクリプトを壊すと、画面に致命的なエラーが出力され、メールが表示されなくなります。

そのようなエラーは、このタイプのエラーロギング/レポートの範囲を超えていますか?

私は何が間違っているのですか?

4

2 に答える 2

3

set_error_handler/set_exception_handler考えられるすべてのエラーを処理するわけではありません。つまり、解析エラーはそれによってキャッチされません。何が処理されないのか正確には言えません。一般的なルールとして、これらのハンドラーは、によってキャッチされたはずの何かが呼び出されたときに呼び出されtry catchますtrigger_error

多くのフレームワークでキャッチされないエラーをトラップするには、 register_shutdown_functionerror_get_lastset_error_handler/set_exception_handlerの組み合わせを使用します

于 2012-08-11T18:19:16.097 に答える
3

ドキュメントにリストされています:

次のエラー タイプは、ユーザー定義関数では処理できません: E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING、および set_error_handler() が呼び出されるファイルで発生するほとんどの E_STRICT。

于 2012-08-11T18:23:55.077 に答える