[PHP-users 24716] Re: 4.x系 fatal errorの捕捉

shima tetuo mlmlml @ lily.freemail.ne.jp
2005年 2月 25日 (金) 10:13:35 JST


とりあえずより理解される為にサンプルコードを載せます。

//    ini_set('error_log', 'エラーログへのパス');        //要変更

の部分をApacheのユーザー(nobody等)が書き込み出来る権限のファイルパスに変
更して、このファイルを実行してみてください。エラーログとして「fatal
errorを捕らえました」が記録されているはずです。


-----

<?PHP

    ini_set('display_errors', 'on');
    ini_set('output_buffering', 'on');
    ini_set('error_log', 'エラーログへのパス');        //要変更
    


    /*
    こういう文字がないかバッファを常に確認
    <br />
    <b>Fatal error</b>:  Call to a member function on a non-object in <b>/path/to/the/file.php</b> on line <b>765</b><br />
    
    */
    function fatal_error_handler($buffer) {
        if (
            ereg("error</b>:.+<br", $buffer) ||        //通常版
            ereg("error: <i>", $buffer)                //xDebug版
        ) {
            
            /*
            ob_start内なので、ECHO等での画面出力は不可能
            データベースへ繋ぎログの記録、Pear::HTTP等でリダイレクトは可能
            */
            error_log('fatal errorを捕らえました');
            exit;
        }
        
        return $buffer;
    }    

    function error_handler($errorNumber, $errorMessage, $errorFile, $errorLine){

        echo '通常エラーを捕らえました。';
        
    }
    
    ob_start('fatal_error_handler');
    set_error_handler('error_handler');
    
    
    $foo->method();
?>



PHP-users メーリングリストの案内