2

デフォルトのPHPエラーハンドラーをオーバーライドしたいのですが、これは数え切れないほど実装されていると確信しています。

私は次のプロジェクトを見つけましたが、ほとんどはかなり古くて小さなプロジェクトのようです。

私は主に欲しいです:

  • すべてのエラー/通知を表示するだけの開発モード
  • クリーンなカスタムレイアウトページをユーザーに表示できる本番モード
  • テキストファイルへのログ記録(Webサーバーへの管理者アクセス権がないため、PHP設定でこれを設定することはできません)
  • 重大なエラーについて警告メールを送信する
  • データベースにログインします

これはPHPでどのように行うことができますか?

4

1 に答える 1

2

関数を使用set_error_handlerしてカスタムエラーハンドラーを設定し、それを使って好きなことを行うことができます。

ベストプラクティスであるIMOは、ErrorExceptionエラーが発生したときにスローし、それを処理することですtry/catch注:処理では、エラーをミュートすることを意味するわけではありません)。例えば:

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");

try {
    //Some code that may produce error
} catch (ErrorException $e) {
    $someLogger->log($e->getMessage());
}

ロガーの代わりに、要件を実装する独自のカスタムクラスがある場合があります。したがって、既存のソースのいずれかがニーズを満たしている場合はそれを使用し、そうでない場合は作成します。

注1:致命的なエラー(ロギングが頭に浮かぶ)に対して何かをしたい場合は、次を使用できます。register_shutdown_function

注2:見つけたクラス/プロジェクトは小さいとおっしゃいました。2つのことがあります。まず、LOCでコードがどれだけ優れているかを測定することはできません。第二に、エラーとはあまり関係がありません。

編集:

一般に、新しいプロジェクトを開発するときに、すべてを最初から再実装することは一般的ではなく、受け入れられません。一度独自のライブラリを構築してから、それらをプロジェクトで使用する必要があります。個人的には、ログ記録にKLoggerを使用しており、満足しています。

于 2013-02-26T10:05:32.083 に答える