次のような自分の Web サイト用のエラー ハンドラを作成しました。
function errorHandler($number, $string, $file, $line, $context, $type = '') {
// save stuff in DB
}
私はこのように登録します:
set_error_handler('errorHandler', E_ALL);
渡されたすべての変数を DB に保存し、問題のデバッグに役立つバックトレースを保存します。
print_r(debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT), true)
問題は、時々このエラーが発生することです:
134217728 バイトの許容メモリ サイズを使い果たしました (30084081 バイトを割り当てようとしました)
上記のエラーが発生したときにエラーハンドラーが実行された理由は、(PHP AWS ライブラリから) Amazon S3 オブジェクトを作成した後に未定義の変数を使用しようとしたためです。Amazon AWS ライブラリが非常に巨大であるため、バックトレースが大量のデータを取り込み、メモリ不足エラー (?) が発生するためだと思います。
デバッグに役立つように可能な場合はバックトレースを含めたいのですが、debug_backtrace()
関数の呼び出しによって致命的なエラーが発生しないようにするにはどうすればよいですか (エラー ハンドラー内で、皮肉なことに..)?