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ページのステータスコードを取得する