私はPHPの初心者ですが、PHPのエラー処理は、エラーと警告が例外に散在している(と私をdie()
で始めることはできません)と、少しのゲットーです。そのため、私のアプリケーションですべてのエラーケースを作成し、解釈し、処理するにはどのように最善の方法をとるべきかはわかりません。PHPでエラーを処理するためのこのアプローチには「問題がありますか?
攻撃の私の一般的な計画は概ね次の通りである:
- は、彼らが来るとしてエラーをラップする
set_error_handler()
を使用して、例外にすべての警告/エラーを変換します。 - 私が間違っていると予期していることを先取りして検査します。エラーを直接処理できない場合にのみ例外をスローします。通常の
try/catch
ブロックは、私が自分自身を投げない例外を処理するために、必要なときに配置されます。 - 私のアプリケーション全体(つまり、自分の
index.php
ポイント・オブ・エントリー・ファイル)は、それ自体がtry/catch
です。それが失敗すると、HTTP 500
が投げられ、適切なエラーページが表示されます。おそらく、このページはヘッダ/ボディ/フッタのコレクションではなく、あらかじめコンパイルされた単一のファイルになります。これは主に、歪んだテンプレートファイルのような奇妙な例外をカバーするためです。私はこれが、Googleの500クラスのエラーページが他のすべてのものと大きく異なるように見えると考えています。 - #2と#3の結果として、私はすべての前払いを処理することを期待しているので、自分自身の例外をスローすることにした場合、ではなく、はエラーをキャッチし、私のトップレベルのハンドラまで。ここでの考え方は、起こったときに私がそれを処理できなければ、おそらくそれ以外のところではそれを扱うことができないということです。私はこれらのエラーに独自のサブクラス(おそらく
CriticalErrorException
)を与えることを考えています。これは私のログで直接識別できます/電子メールを出してすぐに調べることができます。一般的に、私はこれらが、がdevで起こることを期待していますが、プロダクションでアイロンをかけなければなりません。 - ログファイルにフェイルオーバーすると、そのファイルを一番上に表示するエラーがデータベースに記録されます。上で示したように重大なエラーが電子メールをトリガーします。レポートがファイルにフェイルオーバーした場合(つまり、DBエラーがある場合)、メールが送信されます。
これはほとんどのケースをカバーしていると思いますが、私が言ったように私はPHPにはとても新しいので、私が見落としているコーナーケースや奇妙な振る舞いがあるかどうかはわかりません。
私の計画の欠陥は何ですか?どうすればそれらを克服できますか?
これは確かなアプローチです。 – DanMan