SHIFTRA

電車の暇つぶしでblogしてみる
2012年02月
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Small Services...
カップラタイマー
計測サービス

パスワード自動生成サービス
ブログ内コンテンツ一覧
- コンテンツのカテゴライズ -
NEW ENTRIES
ARCHIVES
- 他へのリンクなど -
エコ親子~夏休み省エネチャレンジ

LINK
Release Contents
このサーバからは、こんなコンテンツが発信されています。(アイウエオ順)
etc.
Googleにはこれだけ登録されてます。
Related Links...

Powered by
BLOGN(ぶろぐん)

PHPで Warningや Noticeをハンドリングする件


PHPでErrorExceptionを使ったエラーハンドリング処理を実装し、よりセキュアな作りに挑戦しようとしたんだけど、Warningやらなんやら投げるようしたら使い勝手が悪くなりすぎた。
っていうか、一番取りたいERRORは有無を言わさずプログラム停止するって仕様はどうなのよ?
未定義の関数を呼び出した時のFatalErrorくらい拾ってほしい…。

ERROR以外は、ページ表示した後 WARNING何件 NOTICE何件、詳細はこうって感じで出せるようにならないかなぁ?
WARNING程度で ERRORと同じ処理をするのは不便すぎるなぁ。

で、こうするのがいいんじゃないかなと思った方法を掲載してみます~

/**
* Error Handlerの定義
* Warningや Noticeなど、発生したメッセージをエラーハンドリングし、
* ErrorExceptionオブジェクトにしておいて、stdClassオブジェクトのプロパティに保存していきます。
* これを Zend_Registryで保持しておくので、後でどこからでも取り出すことができます。
*/
{
// (E_ALL | E_STRICT)発生時に呼び出される関数を登録します。
set_error_handler(
function ($errno, $errstr, $errfile, $errline, $errcontext)
{
// レジストリに登録があるかを確認し、あれば取り出します。
if (Zend_Registry::isRegistered('myErrorException'))
{
$myerr = Zend_Registry::get('myErrorException');
}

// なければ stdClassオブジェクトを生成し、
// エラーを保存するプロパティを用意して、
// レジストリに登録します。
else
{
$myerr = new stdClass;
$myerr->e = array();
Zend_Registry::set('myErrorException', $myerr);
}

// ErrorExceptionオブジェクトを生成し、プロパティに格納します。
$myerr->e[] = new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
, (E_ALL | E_STRICT)
);
}


すべての処理が終わった後、これを煮るなり焼くなりすればいいかと^^
Zend_Logで、Firebugのコンソールへ送る方法があるようなので、それを使う実装ができるといいんじゃないかなぁって思います。

あ、これ、PHP5.3以降対応です。無名関数のところを書き変えれば PHP5以上で動作すると思います。


関連する関数・ライブラリについては、以下を参照のこと。

PHPマニュアル set_error_handler()
http://jp.php.net/manual/ja/function.set-error-handler.php

ZendFrameworkマニュアル Zend_Registry
http://framework.zend.com/manual/ja/zend.registry.html



| プログラムの話 | 12:36 PM | comments (1) | trackback (0) |
コメント
Pearライブラリが鬼のように Noticeを吐く…
む無理ー^^

最新版なら大丈夫なのかな? Pear2ってどうなったんだろう?
| しょうなり | EMAIL | URL | 2011/04/01 10:33 PM | Yo9WBngs |


コメントする









この記事のトラックバックURL
http://www.shiftra.jp/shounari/tb.php/68
トラックバック
PAGE TOP ↑