Fatal Error 発生時、以降の処理は中断されるため通常は try ~ catch などでエラーを捕捉することができません。
そこで、register_shutdown_function() を使ってスクリプト終了時に関数を実行し、エラーの内容をテキストとして保存します。
<?php
register_shutdown_function('shutdown');
$test = new Test();
function shutdown(){
$error = error_get_last();
if(empty($error)) return;
switch($error['type']){
case(E_ERROR): $type = "Fatal Error"; break;
case(E_WARNING): $type = "Warning"; break;
case(E_NOTICE): $type = "Notice"; break;
default: $type = "Error";
}
$date = new DateTime();
$line = sprintf("%s: %s. %s in %s on line %s\n",
$date->format('Y-m-d H:i:s'), $type, $error['message'],
$error['file'], $error['line']);
file_put_contents(dirname(__FILE__) . "/log.txt", $line,
FILE_APPEND | LOCK_EX);
}
【出力結果】
2015-02-23 08:03:36: Fatal Error. Class 'Test' not found in C:\xampp\htdocs\lab\index.php on line 4
存在しないクラスをインスタンス化しようとして Fatal Error が発生しています。
error_get_last() で最後に発生したエラーを取得できるので、それを整形してログファイルに追記します。
参考: http://php.net/manual/ja/function.register-shutdown-function.php
Similar Posts:
- [PHP]よくあるエラーメッセージの原因と対処法 1
- [PHP]よくあるエラーメッセージの原因と対処法 2
- [PHP]ZipArchiveクラスを使ったファイルのZip圧縮と展開(解凍)
- [PHP]HSV(HSB)をRGBに変換する
- [PHP]switch()は通常では厳密に型を比較しない
- [PHP]PHPを始めた頃に思っていた細かい疑問
- [PHP]同じ名前のファイルが存在するときは番号(連番)を付ける
- [PHP]file_get_contents()でWebページのステータスコードを取得する