P.a.G.E.

PHP 5.1 で 掲示板ビューワ機能を主とする Web アプリケーション・スイートを作ってみるテスト。

詳しい情報は、追って公開していきます。

なかなか進捗せず、現状では自作ライブラリ置き場となっていますが、いつかきっと出ます。


PHP 用ライブラリ


Epeg extension

Epeg を使って JPEG 画像のサムネイルを作成する PHP 用の拡張モジュールです。PHP での画像処理のデファクトスタンダードである GD より格段に高速かつ消費メモリが少ないのが特徴です。x86 SIMD 版 libjpeg ライブラリ を併用するとさらなる高速化が見込めます。

ストリーム API をサポートしており、ローカルファイルだけでなく URL を直接読み書きすることができます。

制作に当たっては、PEAR の CodeGen_PECL および 青マンモス本 (PHP5徹底攻略 エキスパート編) が大きな助けとなりました。

このモジュールは Epeg の API をラップした関数群に加えて、独自に epeg_thumbnail_create() 関数を提供します。また、PHP5 以降ではオブジェクト API も利用できます。関数一覧

ドキュメント、テストケース、サンプルの充実は今後の課題。

Install

普通の PHP 拡張モジュールと同じように、下記のようにしてインストールします。

% /path/to/phpize
% ./configure --with-php-config=/path/to/php-config --with-epeg=/path/to/epeg-config
% make
% sudo make install
Usage

簡単な使用例は examples ディレクトリにあるファイルを見てください。

epeg_decode_size_set($im, $w, $h); / $epeg->setDecodeSize($w, $h); ではアスペクト比を無視して指定したサイズに画像を展開しますが、epeg_thumbnail_create($in, $out, $maxw, $maxh); はアスペクト比を維持してサムネイルを作成します。

Downloads

MeCab extension

MeCab を使って文章の形態素解析をする PHP 用の拡張モジュールです。

このモジュールは MeCab の API をラップした関数群に加えて、独自にノードの属性を連想配列として返す mecab_node_toarray() 関数および MeCab_Node::toArray() メソッドを提供します。また、PHP5 以降ではオブジェクト API も利用でき、SPL が有効なら MeCab_Node オブジェクトはイテレータとしても使えます。関数一覧

Install

普通の PHP 拡張モジュールと同じように、下記のようにしてインストールします。

% /path/to/phpize
% ./configure --with-php-config=/path/to/php-config --with-mecab=/path/to/mecab-config
% make
% sudo make install
Usage

簡単な使用例は examples ディレクトリにあるファイルを見てください。

解析オプションは配列で指定します。値をとるオプションは、$options = array('-d', '/usr/local/lib/mecab/dic/ipadic'); のようにオプション名の次に値を入れてください ('オプション名' => '値' の連想配列も可)。'-d/usr/local/lib/mecab/dic/ipadic', '--dicdir=/usr/local/lib/mecab/dic/ipadic' のように、ひとつの文字列でオプションと値を同時に指定することはできません。

パスを指定するオプション (-r, -d, -u) の値は open_basedir と safe_mode のチェックを受け、一部のオプション (-o, -v, -h) は利用できません。

rcfile (-r), dicdir (-d), userdic (-u) の値は php.ini または ini_set() でも設定できます。

Downloads

Unicode Normalizer extension

ICU を使って文字列を Unicode の正規化ルールに従って正規化する PHP 用の拡張モジュールです。

このモジュールは 4 つの異なる方式で正規化する関数 unorm_nfc(), unorm_nfd(), unorm_nfkc(), unorm_nfkd() と、対応するエンコーディング一覧を返す関数 unorm_list_encodings()を提供します。

Install

普通の PHP 拡張モジュールと同じように、下記のようにしてインストールします。

% /path/to/phpize
% ./configure --with-php-config=/path/to/php-config --with-unorm=/path/to/icu-config
% make
% sudo make install
Usage

簡単な使用例は examples ディレクトリにあるファイルを見てください。

デフォルトでは文字列は UTF-8 でエンコーディングされているものとして扱われます。デフォルトのエンコーディングは ini_set("unorm.default_encoding", $encoding); で変更できるほか、各正規化関数の第二引数でも指定できます。

ICU 3.6 以降とリンクしてコンパイルされた場合は、エンコーディングの自動判定にも対応しています。自動判定を行うには、エンコーディングに auto を指定します。定数 UNORM_AUTODETECT が定義されており、0 でなければこの機能を利用できます。

Downloads

Cache_SQLite & Cache_PDO

PHP5 用のストレージに SQLite または PDO を使うキャッシュクラスです。一般的な用途にはけっこう使い勝手が良いと思います。対応する PDO ドライバは PDO_MYSQL, PDO_PGSQL, PDO_SQLITE のみです。

簡単な使い方は README に書いていますが、詳しい設定はソース (もしくはテストスイート) を読まないと分からない状態です。申し訳ない。

API Documents
Downloads

EstraierPure & Services_HyperEstraier

Hyper Estraier の配布物に含まれる estraierpure.rb を PHP に移植し、ノード API の Pure PHP クラスライブラリ EstraierPure を作成しました。*1 利用に際しては公開されているノードサーバに接続するか、自分でノードマスタを起動しておく必要があります。

EstraierPure には PHP 4.3 対応版と、結果セットをイテレータとして利用できる PHP 5.1 専用版があります。Services_HyperEstraier は PHP 5.1 専用版 EstraierPure を PEAR 標準コーディング規約に準拠させたもので、機能は全く同じです。

今後は各種文書から属性を抽出し、文書ドラフト形式に変換するためのフィルタも作成する予定です。また、コア API の Pure PHP 実装 (estcmd のフロントエンド) として Search_HyperEstraier も作りたいと思っています。

API Documents
Downloads

Stream_Filter_MBString

ストリームフィルタの習作として mb_convert_*() 系関数を使ったものを作ってみました。PHP 5.1 専用です。使い方は examples ディレクトリにあるサンプルを見てください。

文字コード変換には convert.iconv.* フィルタが既にあり、変換元のエンコーディングが分かっていて、かつそのエンコーディングの仕様にない文字が含まれていないことが保証されているならそれで十分なのですが、convert.mbstring.* フィルタは自動判定ができる、変換マップに無いシーケンスがあってもエラーとならない *2 といった特徴があります。

API Documents
Downloads

Stream_Filter_Hash

ストリームフィルタの習作・第二段として ハッシュ関数を使ったものを作ってみました。PHP 5.1 専用です。使い方は examples ディレクトリにあるサンプルを見てください。

現状ではストリームへの書き込みには適用されますが、読み出しには適用されないようです。

余談になりますが、PHP の Hash Context リソースは hash_update() により逐次データを追加できるものの、複製することで途中までの計算結果を共有できない上に、一度 hash_final() したらそれ以降はデータを追加できないのはどうかと思います。Perl の Digest 系モジュール、Pyhotn や Ruby の MD5 等では当たり前のようにできていることなので、ぜひ改善してほしいところです。

API Documents
Downloads

DatControl

がっくしメニューで使われている DatControl.pm をインスパイヤして にインスパイアされて PHP5 に移植してみました。

しかし書いてみただけで、僕がそのまま使う予定はありません。Cache_SQLite はこれから派生し、さらにドライバに依存しない部分を Cache_OODB に追い出した後、Cache_PDO ができたという経緯があります。


製作中・構想中の PHP 用ライブラリ


Stream_DB (製作中, depends on PHP 4.3.3 or newer, PHP 5.1.0 or newer recommended)

PEAR::DB, PEAR::MDB2, PDO のいずれかをバックエンドに使うストリームラッパー。

ファイルシステムを扱うのとほぼ同様にデータベースをストレージとして利用できるようになる。PHP 4.3 にも対応するが、ストリーム API の機能が充実している PHP 5.1 を推奨。

stat() をどこまでサポートするか、ディレクトリの扱いをどうするかで悩み中。


Stream_Filter_HyperEstraier (構想中, depends on PHP 5.1.0 or newer)

Services_HyperEstraier を使ってストリームの内容を Hyper Estraier に登録するストリームフィルタ。

内部的には Hyper Estraier の文書ドラフト形式のデータを生成するが、次の bucket bridge には未加工のままのデータを渡す。


Services_Aozora (構想中, dependencies unknown)

青空文庫の XHTML を検索・閲覧するための基本的な API を提供するパッケージ。


HTML_FlexyForm (構想中, depends on PHP 4.3.3 or newer)

柔軟なフォームを作るためのパッケージ。

名前から分かるように*3 Flexy を使う。といってもテンプレートエンジンとしての HTML_Template_Flexy ではなく、HTML_Template_Flexy_Element を使うだけで、Smarty やベタ書きの PHP コードとも組み合わせて使える。もちろん Flexy との親和性は抜群。

AJAX 対応、スケルトンジェネレータも用意する。PECL の filter エクステンションを使ってみたい。


その他

Search_HyperEstraier (PHP 5.1.0 / estcmd), Stream_DBA (PHP 4.3.3 / dba), Stream_SharedMemory (PHP 4.3.3 / PEAR::System_SharedMemory), etc...


*1: estraierpure.rb のコメントが充実していたので、Docblock コメントの記述がとても楽でした。上記リンクのドキュメントはこれを元に PhpDocumentor で自動生成されたものです。

*2: 代わりに文字化けします。また、これは必ずしも良いことではなく、むしろエラーを吐いてくれた方が安心な場合も多いでしょう。

*3: 設計に関しては HTML_QuickForm を参考にしたというよりは、Ethna の ActionForm や PRADO から強い影響を受けています。