20081120 lt11th ace

Preview:

Citation preview

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も

準備しておこうデフォルトのエラーページはかっこわるい(もちろんセキュリティ・ユーザビリティ的にも好ましくない)

ご静聴ありがとうございました