[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 メーリングリストの案内