php[tek] 2018 : Call for Speakers

基本

PHP は、各種のエラー条件に対応したさまざまなエラーを報告します。 これらを使えばさまざまな状況を伝えられるでしょうし、 必要に応じて画面に表示したりログに記録したりすることもできます。

PHP が発するあらゆるエラーには、型情報が含まれます。 型の一覧 を参照ください。 それぞれについての簡単な説明と、どのような原因で発生するのかについても説明があります。

PHP におけるエラー処理

何もエラーハンドラを設定しなければ、PHP は、 発生したあらゆるエラーを設定にあわせて処理します。 どのエラーを報告してどのエラーを無視するのかを決めるのが、php.ini の error_reporting です。あるいは、実行時に error_reporting() を呼んで設定することもできます。 しかし、できるだけ php.ini で設定しておくことをお勧めします。 というのも、スクリプトの実行が始まるまえにエラーが発生することもありえるからです。

開発中は常に、 error_reportingE_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() で設定することもできます。 中にはこの方式では処理できない型のエラーもありますが、 処理できる型のエラーについてはこの方法が便利です。 たとえば、ユーザー向けにはカスタムエラーページを表示して、 内部的にはログに書き出すかわりにメールを送るなどとすることもできます。

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top