20081120 lt11th ace
TRANSCRIPT
ECAあなたとは 違うんです
エラー処理
2008年11月20日(木)第11回Lightning Talk
林 正紀id:m_norii
というわけでPHPの
エラー処理のお話です
ところでエラー処理
ちゃんとしてますか?
CASE1 : 放置
$filename が存在しないとE_WARNINGが出る
CASE2 : 黙殺
E_WARNINGうざいからとりあえず抑制した。。。
論外
CASE3 : 比較的まともな例
・ファイルの存在チェックをしてる・各関数でFALSEが返ってきた場合をケア
でも、いちいちif(($handle=fopen($file))===FALSE)
とかor die(’Error!’)
とか面倒。
なのでエラーハンドラを
使いましょう
定義側:定義側:
利用側:
詳しい使い方はPHPマニュアル参照。
CASE4:PEARのエラー処理
てか、PEAR::isError()
ばっかでうざいし。。。orz
でも大丈夫!
PEARにもエラーハンドリング機構が
あるよ(^^)v
PEAR::setErrorHandling()
あとはさっきの要領で、ErrorHandlerクラスにエラー時に実行する handlePEARError() メソッドを定義するだけ。→エラー処理が消えて、読みやすい ソースコードになったよ!
ところで
PEARって「クラス」ライブラリ
ですよね?
だったらエラーも「例外」で
処理しませんか?PHP5限定だけど・・・
PEAR_ErrorをPEAR_Exceptionに詰め替えてthrowするラッパを作る
※元ネタは [PHP-users 25583]のMLより。
さらにPHPのデフォルト例外ハンドラも定義しておく
そして、利用する時はこんな感じ。
あとは、冒頭のset_error_handler();
とかも、auto_prepend_file に指定して
コードから追い出しちゃう・・・って手もありますが。
・・・そこは好き好きに。(^^;;;
まだまだエラー処理について
語るべきことは多いのですが・・
たぶんタイムアップ寸前なので
(^^;;;
・・・さわりだけ
【大事なこと1】Webページのエラー処理と
コマンドラインのエラー処理はちゃんとわける
maillog に HTMLのエラーページが出力されてるとか、ありえないし。。。orz
【大事なこと2】エラー処理は、最初に設計・実装!
いわゆる「横断的関心事」だから、後で付け足そうと思うと結構めんどくさいので。
【大事なこと3】php.iniの設定、要確認!!
本番環境で display_errors = On とかはずかしいぞ!
【大事なこと4】ApacheのErrorDocumentも
準備しておこうデフォルトのエラーページはかっこわるい(もちろんセキュリティ・ユーザビリティ的にも好ましくない)
ご静聴ありがとうございました