2009年11月6日金曜日

PHPで Fatal Error時の状況を調べる方法

PHPでFatal Errorが発生すると以降の処理が実行されない。
かつ、try/catchやset_error_handler()ではFatal Errorを捕まえられない。
なので通常は、Fatal Errorが起きたときの詳しい状況はログに残らない。
(例えばエラーが起きたPHPのファイル名はログに残るが、それを呼び出した側のPHP名や、データの状況は分からない。)

しかし、register_shutdown_function()を使えばエラーが起きたときの状況をログに残せる。

register_shutdown_function('shutdownHandler');

function shutdownHandler(){
$error = error_get_last();
if ($error['type']) { //エラーの場合のみ
error_log(...); //必要な情報を書き出す。
}
}

ただしこれだとE_NOTICEとかでもひっかかってしまうので、Fatal Errorだけを拾いたい場合はtypeを指定する。
register_shutdown_function('shutdownHandler');

function shutdownHandler(){
$error = error_get_last();
if ($error['type'] == E_ERROR) {
error_log(...); //必要な情報を書き出す。
}
}
これだとExceptionが拾えない?


参考:
PHP の「エラー処理ハンドラ」「シャットダウンハンドラ」「例外処理ハンドラ」の挙動 - Web/DB プログラミング徹底解説
PHP: register_shutdown_function - Manual

7 件のコメント:

人妻 さんのコメント...
このコメントはブログの管理者によって削除されました。
サイドビジネス さんのコメント...
このコメントはブログの管理者によって削除されました。
Hチェッカー さんのコメント...
このコメントはブログの管理者によって削除されました。
高収入アルバイト さんのコメント...
このコメントはブログの管理者によって削除されました。
高級チェリー さんのコメント...
このコメントはブログの管理者によって削除されました。
困っています。 さんのコメント...
このコメントはブログの管理者によって削除されました。
副収入 さんのコメント...
このコメントはブログの管理者によって削除されました。

ブログ アーカイブ

tags