PHP は、各種のエラー条件に対応したさまざまなエラーを報告します。 これらを使えばさまざまな状況を伝えられるでしょうし、 必要に応じて画面に表示したりログに記録したりすることもできます。
PHP が発するあらゆるエラーには、型情報が含まれます。 型の一覧 を参照ください。 それぞれについての簡単な説明と、どのような原因で発生するのかについても説明があります。
何もエラーハンドラを設定しなければ、PHP は、
発生したあらゆるエラーを設定にあわせて処理します。
どのエラーを報告してどのエラーを無視するのかを決めるのが、php.ini の
error_reporting
です。あるいは、実行時に
error_reporting() を呼んで設定することもできます。
しかし、できるだけ php.ini で設定しておくことをお勧めします。
というのも、スクリプトの実行が始まるまえにエラーが発生することもありえるからです。
開発中は常に、
error_reporting
を E_ALL
にしておくべきです。
PHP が発する報告をすべて確認して対応する必要があるからです。
実際の運用に入ったら、もう少しレベルを下げて
E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
などのようにすることもあるでしょう。しかし、できれば運用中も
E_ALL
にしておきたいものです。
そうすれば、何かの問題が発生しそうなときに早い段階で気づけるからです。
エラーが発生したときの PHP の挙動を決める php.ini 設定項目が、あと二つあります。
ひとつは
display_errors
で、これは、エラーの内容をスクリプトの出力に含めるかどうかを設定します。
この項目は、運用時には常に無効にしておくべきです。
エラーメッセージの中には、データベースのパスワードなどの機密情報が含まれることもありえるからです。
しかし、開発中は有効にしておくほうが便利です。
どこに問題があるのかに、すぐに気づけるからです。
もうひとつの項目が
log_errors
で、これを有効にしておくと、PHP はエラーをログに記録します。
発生したすべてのエラーが、
error_log
で定義した場所 (ファイルや syslog など) に書き出されます。
これは、運用環境で特に役立ちます。
発生したエラーを記録しておけば、後でそれを使ってレポートを生成できるからです。
PHP のデフォルトのエラー処理では不十分な場合は、 自作のエラーハンドラを用意して、それを set_error_handler() で設定することもできます。 中にはこの方式では処理できない型のエラーもありますが、 処理できる型のエラーについてはこの方法が便利です。 たとえば、ユーザー向けにはカスタムエラーページを表示して、 内部的にはログに書き出すかわりにメールを送るなどとすることもできます。