駒形電産

PEAR :: Package :: File :: 1.2.0

Changelog:

* Fixed package.xml for PEAR 1.4 (dufuz)
added FILE_SORT_RANDOM mode (mike)
added File_Util::switchExt() (mike)

ファイルやディレクトリの読み書きなどが簡単にできるFileの1.2.0がリリース。

ChangelogにあるFILE_SORT_RANDOM modeを試してみました。

<?php
require_once("File/Util.php");
foreach (File_Util::listDir("foo", FILE_LIST_FILES | FILE_LIST_DIRS, <strong>FILE_SORT_RANDOM</strong>) as $file) {
    echo $file-&gt;name."\n";
}
?&gt;

結果:

&gt;php FileListing.php
d.txt
b.txt
a.txt
c.txt

なるほど、ちょっとだけ嬉しい。

よくきたblog

xxxio : $_SESSION[‘foo’]の、fooの所に使える文字って、きまりありましたっけ?
xxxio : うーん。””|”“が入ってると上手く動かない気がする
xxxio : php5.0.3 / FC2 なんですけど、そもそも /tmp/sess_XXXXX の中って、
xxxio : セパレータとして ””|”” を使ってるんですよ

セッションの話。
そうそう、セパレータに””|”“を使ってるんですよね!

セッション変数名|中身をserializeしたやつ;セッション変数名|中身をserializeしたやつ;

ってなってるんですよね。これ簡単なパースのやり方無いかな。
このクラスができたら楽しいけどsafe modeじゃない共有レンタルサーバとかすっごい危険。

ref: PHPのセッション自力復元

PEAR :: PEPr :: Details :: Auth_TypeKey

The Auth_TypeKey package provides verification method using TypeKey Authentication. TypeKey is one of single sign-in service for weblog comments and others provided by Six Apart.

Blogネ申平田さんが以前公開されたPHPでTypeKeyを扱うクラスAuth-TypeKeyがPEARのProposaleに入っています。
認証で何気にTypeKey使ってたらおしゃれかもしれません。

ethna_seminer.jpg

オープンソースカンファレンス2005行って来ました。

行ったのはPHPフレームワーク -Ethna-と懇親会。 Ethna(えすな)ではマシントラブルでデモが行えずスライドのみになりましたが、フレームワーク全般の話などためになりました。
Mapleのkunitさんもこられていて、DIContainer+AOPへの動きなど超気になったんですが、「おれみたいなもんが・・・」と話かけられませんでした。

懇親会でためになったのはPHP以外の人がPHPをどう思ってるかについて。

・ダサい
・Apacheモジュールで動く手っ取り早いスクリプト言語が他に無いから広まってるだけ
・PHP5の方向性はがっかり
・Zendの都合に左右されてる
・仕事の匂いがする
・Javaの匂いがする

などなど。自分自身でも”“なんでPHPが好きなのか”“きっぱり説明できないので情けない感じ・・・。
某出版社の方も「PHPの本は提案しずらい」とおっしゃっていました。PHP5の本が全然売れてないとか。そんな状況でPEAR本書きたいとか言っときました。(PEAR好き)

オープンソースカンファレンス2005、明日のに行きます。
申し込んだのはPHPフレームワーク Ethna懇親会。懇親会も新宿と近くて嬉しい。

OOPP MemorandaさんとこにあったMojavi, QF連携でのFormLoadFilterについて。
素晴らしいのでやってみました。(via t-kawazu)

&lt;?php
class FormLoadFilter extends Filter{
    function execute(&$filterChain, &$controller, &$request, &$user) {
        $form_file = BASE_DIR.'modules/'.$controller-&gt;getCurrentModule().'/forms/'.$controller-&gt;getCurrentAction().'Form.class.php';
        if (is_readable( $form_file ) === true) {
            require_once($form_file);
            $form_name = $controller-&gt;getCurrentAction().'Form';
            <strong>$form = & new  $form_name($controller, $request, $user);</strong>
            $request-&gt;setAttributeByRef('form', $form);
            $filterChain-&gt;execute(&$controller, &$request, &$user);
            $request-&gt;removeAttribute('form');
        } else{
            $filterChain-&gt;execute(&$controller, &$request, &$user);
        }
    }
}
?&gt;

これって、

&lt;?php
class FormLoadFilter extends Filter{
    function execute(&$filterChain, &$controller, &$request, &$user) {
        $form_file = BASE_DIR.'modules/'.$controller-&gt;getCurrentModule().'/forms/'.$controller-&gt;getCurrentAction().'Form.class.php';
        if (is_readable( $form_file ) === true) {
            require_once($form_file);
            $form_name = $controller-&gt;getCurrentAction().'Form';
            <strong>$instance =& new $form_name();</strong>
            <strong>$form =& $instance->execute($controller, $request, $user);</strong>
            $request-&gt;setAttributeByRef('form', $form);
            $filterChain-&gt;execute(&$controller, &$request, &$user);
            $request-&gt;removeAttribute('form');
        } else{
            $filterChain-&gt;execute(&$controller, &$request, &$user);
        }
    }
}
?&gt;

こうじゃね?
コンストラクタだと$thisに$formを突っ込むしか返しようがなくて少しトリッキー。

ref: FormLoadFilter

BMediaNode: PHPUnit Cookbook

JUnit Cookbookの内容を元にしたPHPおよびPHPUnit向けのチュートリアル、PHPUnit Cookbookが公開されました。

PHPUnit Cookbook。これはチェックしなければ。Unitテストについてはコレとかと合わせて職業PHP野郎は必ず知るべき!

ref: 軽快なPHP

こんな書き方ができるなんて知らなかった・・・

D:\>php -r print($_ENV["OS"]);
Windows_NT
D:\>php -r print($_ENV["OS"]{2});
n

Affiliates

Developers who want more flexibility than the QuickLinks offer will appreciate the considerable power and freedom available in the use of the API calls.

定額オライリー本読みホで有名なsafariがアフィリエイトとWebサービスを始めたようです。

Webサービスは本のタイトルや作者等で検索できるくらいですが、PEARのProposedにはいつのまにかServices_Safariが!

もっとFlickrとか先に作ろうぜと・・・。

PEAR :: PEPr :: Details :: Services_Safari

Services_Safari is an interface for making requests to the web service provided by O’Reilly’s Safari Bookshelf electronic reference library.

古いPHPアプリを設置したら

fatal error; undefind function fetchRow()

しかしおれはピンと来た!

p0t: PEAR DBのfetchRowメソッド

PEAR DBのfetchRowメソッドは1.5.0RC1を境にDB_common(DB_pgsqlとか)からDB_resultに移ってる。

バッドノウハウ・・・。
古いDB, PEARを持ってきてinclude_pathをこっちが優先されるように通したら何事もなく動いた。