2012-10-06 11 views
5

PHP Webシステムの開発中に、E_ALL | E_STRICTをerror_reportingに設定し、通知エラーを含むあらゆる種類のエラーを処理することは良い方法です。リリースされたPHP Webシステムで、どのタイプのエラーをシステムを停止する必要がありますか?

リリースされたシステムでは、通知エラーが発生したときにシステムを停止する必要がありますか?

E_ERRORが発生した場合にのみシステムを停止し、E_WARNING、E_NOTICE、E_STRICTなどの他のエラーはすべて無視する必要がありますか?

カスタムエラーハンドラでどの種類のエラーを処理し、システムを停止(終了)する必要がありますか?

+2

警告はシステムを確実に停止させるはずです(しかし、元のエラー/例外ハンドラは残しておかないでください。独自のエラーハンドラはエラー情報を開示しません)。より少ないエラーレベルは決定的ではありませんが、少なくともそれらをログに記録してレポートを自分宛てに送信する必要があります。それはあなたがそれらを修正するよう動機づけるでしょう:) – DCoder

+0

@DCoder良いアドバイスありがとう! E_WARNINGが発生したときにシステムを停止する理由を教えてください。 –

+1

高可用性よりも正確さが重要であるほとんどのケースでは、「何があっても動いている」よりも「失敗する」が望ましいです。警告は、通常、何かが本当に間違っていたことを意味し、動くことは物事を悪化させるだけです。このサイトで最もよくある質問を考えてみましょう。["mysql_fetch_ expects parameter ...、boolean given"](http://stackoverflow.com/search?q=mysql+fetch+boolean+given)。最初の警告でスクリプトを停止しない場合は、繰り返し処理された警告の長いリストを取得し、さらに処理で失敗したクエリの結果を使用して他のデータを混乱させる可能性があります。 – DCoder

答えて

4

コードを作成する際には、注意書きを含めて警告を行う必要があります。

プロダクションではエラーが発生しても実際には停止しません。代わりにset_error_handler()を使用して、E_USER_ERROR,E_USER_WARNING,E_USER_NOTICEなどのエラーを管理できます。クライアントをカスタムページにリダイレクトし、任意の種類のエラーのカスタムメッセージを表示します。要点は、デフォルトのエラー情報を残さないことです。

プロダクションサーバーで発生したエラー(電子メールなど)は、できるだけ早く報告してください。

php.net/set_error_handlerには、あなたの人生を楽にし、エラーや警告を追跡するのに役立つたくさんの例があります。

+0

[php.net/set_error_handler](http://php.net/set_error_handler)のエラーハンドラのすべての例で、E_WARNING(E_USER_WARNINGではない)が発生したときに 'exit'を呼び出さないでください。 E_WARNINGが発生したときにエラー画面やメッセージをユーザーに表示したり、システムを停止(終了)する必要はないと思いますか? –

+0

それはあなたの決断です、警告は 'exit'を必要としません、彼らはちょうど警告です(未定義のインデックス、廃止された関数など..) –

+0

あなたの答えに感謝! –

関連する問題