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) |

Flexy で チェックボックス/ラジオチェックの動作がおかしい点について


PHP/PEARライブラリの Flexy というテンプレートエンジンを触って見ました。

Flexyの特徴としては、タグの中に属性値として if処理と foreach処理が指定できるので、WYSIWYGソフトでHTML編集をした際にレイアウトが崩れにくいというのがあげられます。
詳しい内容とインストール手順は、他サイトに任せます。

その際に、いくつか動作がおかしい点を見つけデバッグしました。
バグというよりは、PHP5での動作を考慮していないのだと思います。ファイルの先頭に、「PHP Version 4」と書かれていますし。

---
追記&再編集: 08/02/24
08年1月末に、まさかの新バージョン(v1.31)リリースです!^^
ちょっとびっくりしました。もう保守されないのだとばかり思っていたので。ただ、まだ PHP4 向けのようですが。
---

続き▽
| プログラムの話 | 03:02 AM | comments (0) | trackback (0) |
PAGE TOP ↑