P.a.G.E.
PHP 5.1 で 掲示板ビューワ機能を主とする Web アプリケーション・スイートを作ってみるテスト。
詳しい情報は、追って公開していきます。
なかなか進捗せず、現状では自作ライブラリ置き場となっていますが、いつかきっと出ます。
PHP 用ライブラリ
- JPEG サムネイル Epeg extension (0.1.1-alpha)
- 形態素解析 MeCab extension (0.2.0-alpha)
- Unicode 正規化 Unicode Normalizer extension (0.1.0-alpha)
- キャッシング Cache_SQLite (0.3.0-beta)
- キャッシング Cache_PDO (0.3.0-beta)
- 全文検索 EstraierPure (0.6.0-beta)
- 全文検索 Services_HyperEstraier (0.6.0-beta)
- ストリームフィルタ Stream_Filter_MBString (1.0.0RC2)
- ストリームフィルタ Stream_Filter_Hash (0.0.1-alpha)
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
- php_epeg-0.1.1.tgz (alpha)
epeg_thumbnail_create()関数でリサイズが必要かどうかの判定で誤った変数を使っていたのを修正。- configure 時、epeg-config がインストールされていない環境では pkg-config を使うように修正。
- php_epeg-0.1.0.tgz (alpha)
- ライセンスを MIT License に変更。
epeg_close()関数が epeg 以外の任意のリソースを開放できてしまうバグを修正。- 色空間定数
EPEG_*に対応する Epeg クラスの定数を追加。 - リフレクション用の引数情報を追加。(PHP 5 のみ)
- php_epeg-0.0.8.tgz (dev)
- PHP 5.2, PHP 6 でコンパイルできるように修正。
- php_epeg-0.0.7.tgz (dev)
epeg_thumbnail_comments_get()を実装。epeg_decode_bounds_set()を実装。ただしデフォルトでは無効。epeg_thumbnail_create()で常に不要なマーカーを削除するように変更。- 使用例を一つのファイルから複数に分割し、examples ディレクトリに配置。
- Epeg バージョン 0.9.0.00x をリンクしているとき、画像を読み込もうとすると Segmentation Fault するバグを修正。
- Epeg と libjpeg が異なるディレクトリにインストールされているとき、configure のチェックでエラーとなるのを修正。
- php_epeg-0.0.5.tgz (dev)
- Epeg の API をラップした関数群と、オブジェクト API を実装。
ただし、以下の関数については未実装。void epeg_decode_bounds_set (Epeg_Image *im, int x, int y, int w, int h);const void *epeg_pixels_get (Epeg_Image *im, int x, int y, int w, int h);const void *epeg_pixels_get_as_RGB8 (Epeg_Image *im, int x, int y, int w, int h);void epeg_pixels_free (Epeg_Image *im, const void *data);void epeg_thumbnail_comments_get (Epeg_Image *im, Epeg_Thumbnail_Info *info);
- PHP 5.0.5, PHP 4.4.2 でコンパイルできるように修正。
epeg_thumbnail()をepeg_thumbnail_create()にリネーム。
- Epeg の API をラップした関数群と、オブジェクト API を実装。
- php_epeg-0.0.3.tgz (dev)
- 画像が縮小されないときもコメント、Exif 等の不要な JPEG マーカーを削除するようにした。
configure で--disable-delete-extra-markersを指定すると無効になる。 - configure のオプション
--with-epegの引数を Epeg がインストールされているディレクトリから epeg-config のパスに変更。 - コンパイラの警告が出ないように修正。
- 画像が縮小されないときもコメント、Exif 等の不要な JPEG マーカーを削除するようにした。
- php_epeg-0.0.2.tgz (dev)
- メモリリークの可能性があったのを修正。
- php_epeg-0.0.1.tgz (dev)
- 最初のリリース。
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
- php_mecab-0.2.0.tgz (alpha)
mecab_split()およびMeCab::split()の第四引数として絞り込み用のコールバック関数を指定できるように変更。- コールバック関数は
mecab_node_toarray()の返り値の配列のサブセット (*node, *path, isbest, sentence_length, alpha, beta, prob が定義されていない) を引数としてとり、boolean を返す。 - PHP5 ではコールバック関数の DocComment で
@mecab_element_require (ノード要素名)とアノーテーションすることで必要な要素を一つだけ取得することもできる。これにより PHP5 では Reflection 拡張モジュールに依存するようになった。 - この機能を使った名詞だけを抽出するサンプルを追加。(examples/split-{func,oo}.php)
- コールバック関数は
- php_mecab-0.1.0.tgz (alpha)
- ライセンスを MIT License に変更。
- 辞書タイプ定数
MECAB_{SYS,USR,UNK{_DICおよびクラス定数MeCab::{SYS,USR,UNK}_DICを追加。 - クラス定数
MeCab::TRAVERSE_{NEXT,ENEXT,BNEXT}を追加。これらは MeCab_Node オブジェクトをイテレータとして利用するときの遷移モードを設定するメソッドMeCab_Node::setTraverse()の引数として使う。 mecab_new(),MeCab_Tagger::__construct()のオプション引数の型を配列のみに変更。文字列等の無効な型が渡されたときは E_WARNING を発し、FALSE を返す。- 分かち書き結果を配列として返す関数
mecab_split(string $str[, string $dicdir[, string $userdic]])およびスタティックメソッドMeCab::split(string $str[, string $dicdir[, string $userdic]])を追加。 - 辞書情報を連想配列として返す関数
mecab_dictionary_info(resource mecab $mecab)およびメソッドMeCab::dictionaryInfo(void)を追加。 - リンクしている MeCab のバージョンを返す関数
mecab_version(void)およびスタティックメソッドMeCab::version(void)を追加。 - MeCab 0.94 で実装された解析結果の全情報を取得できる API のサポートを追加。
mecab_node_begin_node_list(resource mecab_node $node, int $index), mecab_node_end_node_list(resource mecab_node $node, int $index), MeCab_Node::getBeginNodeList(int $index), MeCab_Node::getEndNodeList(int $index)
これにより、コンパイルには MeCab バージョン 0.94 以降が必須となる。 - MeCab_Tagger クラスの別名として MeCab クラスを追加。
- 関数
mecab_node_get_*()をmecab_node_*()に、mecab_path_get_*()をmecab_path_*()に、それぞれリネーム。 - php.ini または
ini_set()で rcfile, dicdir, userdic のデフォルト値を設定できるようにした。 - -r, -d, -u オプションで open_basedir と safe_mode のチェックをするように修正。
- -o, -v, -h オプションを受け付けないように修正。
- -O wakati オプションを付けたとき、-a オプションを付けたとき、および新機能のサンプルを追加。
mecab_destroy()関数が mecab 以外の任意のリソースを開放できてしまうバグを修正。- 全面的にリファクタリングし、関連するオブジェクトが誤って廃棄されないように独自の参照カウンタを導入。
- リフレクション用の引数情報を追加。(PHP 5 のみ)
- php_mecab-0.0.3.tgz (dev)
- PHP 5.2, PHP 6 でコンパイルできるように修正。
- php_mecab-0.0.2.tgz (dev)
- ソースコードを整理。
- php_mecab-0.0.1.tgz (dev)
- 最初のリリース。
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
- php_unorm-0.1.0.tgz (alpha)
- ライセンスを MIT License に変更。
- ICU のバージョン番号に patchlevel があるとき (3.4.1 等) configure でエラーとなるのを修正。
- エンコーディングの自動判定を試験的に実装。
- ICU 3.4.1 と ICU 3.6 で動作確認。ICU 2.6 以降が必須。
- php_unorm-0.0.2.tgz (dev)
- 正規化に失敗した際に Segmentation Fault する可能性があったのを修正。
- php_unorm-0.0.1.tgz (dev)
- 最初のリリース。
Cache_SQLite & Cache_PDO
PHP5 用のストレージに SQLite または PDO を使うキャッシュクラスです。一般的な用途にはけっこう使い勝手が良いと思います。対応する PDO ドライバは PDO_MYSQL, PDO_PGSQL, PDO_SQLITE のみです。
簡単な使い方は README に書いていますが、詳しい設定はソース (もしくはテストスイート) を読まないと分からない状態です。申し訳ない。
API Documents
Downloads
-
Cache_SQLite-0.3.0.tgz (beta) /
Cache_PDO-0.3.0.tgz (beta)
- ライセンスを MIT License に変更。
- パッケージの Channel を __uri に変更。
- 関数キャッシングクラス Cache_{SQLite,PDO}_Function を追加。
- 単体テストのフレームワークを pear.php.net/PHPUnit2 から pear.phpunit.de/PHPUnit に変更。
- File/Util.php をロードしていないバグを修正。(Cache_SQLite)
- Cache_PDO を継承し、ラージオブジェクトにデータを保存するクラス Cache_PDO_LOB を追加。(Cache_PDO)
- PDO_MYSQL のサポートを追加。(Cache_PDO)
- PDO_SQLITE2 のサポートを廃止。(Cache_PDO)
-
Cache_SQLite-0.2.0.tgz (beta) /
Cache_PDO-0.2.0.tgz (alpha)
- Cache_SQLite と Cache_PDO を完全に分割。
- PEAR Installer に対応。(Channel は暫定的に pear.php.net)
-
Cache_OODB-0.1.0
- 以前のバージョンと互換性の無い変更あり、移行ツールなし。
- テーブル構造を変更し、データ用カラムを BLOB 型に & データ保存フォーマットも記録するように。
- SQLite データベースの自動 VACUUM オプションを追加。
- WDDX 形式でのシリアライズオプションを廃止。
- その他多数の改良・仕様変更。
- Cache_OODB-0.0.2.tgz
- バグ修正。
- データの zlib 圧縮オプションを追加。
- Cache_OODB-0.0.1.tgz
- 最初のリリース。
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
-
EstraierPure-0.6.0.tgz (beta) /
Services_HyperEstraier-0.6.0.tgz (beta)
- ライセンスを MIT License に変更。
- パッケージの Channel を __uri に変更。
- EstraierPure から PHP 5 専用版 (estraierpure.php5) を削除。
- Hyper Estraier 1.4.10 の estraierpure.rb 相当にアップデート。
- 属性重複除去フィルタをサポート。
EstraierPure_Condition::set_distinct() / EstraierPure_Condition::distinct()Services_HyperEstraier_Condition::setDistinct() / Services_HyperEstraier_Condition::getDistinct()
- スコアリングをサポート。
EstraierPure_Condition::set_score() / EstraierPure_Condition::score()Services_HyperEstraier_Condition::setScore() / Services_HyperEstraier_Condition::getScore()
- 属性検索ができないバグを修正。
getErrorStack(),pushErrorStack()メソッドを Utility クラスから排除し、専用クラス EstraierPure_Error, Services_HyperEstraier_Error を追加。
これに合わせてサンプルも更新。- HTTP クライアントを PEAR::HTTP_Request から PHP のストリーム関数を使った独自のものに変更。
-
EstraierPure-0.5.0.tgz (beta) /
Services_HyperEstraier-0.5.0.tgz (beta)
- Hyper Estraier 1.4.5 の estraierpure.rb 相当にアップデート。
- 新しい検索フレーズの書式 (粗略書式, 論理和書式, 論理積書式) をサポート。Condition クラスにそれぞれに対応した定数を追加。
ESTRAIERPURE_CONDITION_{ROUGH,UNION,ISECT}(estraierpure.php)EstraierPure_Condition::{ROUGH,UNION,ISECT}(estraierpure.php5)Services_HyperEstraier_Condition::{ROUGH,UNION,ISECT}(Services/HyperEstraier/Condition.php)
-
EstraierPure-0.4.0.tgz (beta) /
Services_HyperEstraier-0.4.0.tgz (beta)
- Hyper Estraier 1.3.3 の estraierpure.rb 相当にアップデート。
- メタ検索が行えるようになった。リンク先のリストを取得するメソッド、マスク対象をリンクの番号で指定するメソッド、現在のマスク値を取得するメソッドを実装。
EstraierPure_Node::links() / Services_HyperEstraier::getLinks()EstraierPure_Condition::set_mask() / Services_HyperEstraier_Condition::setMask()EstraierPure_Condition::mask() / Services_HyperEstraier_Condition::getMask()
- ノードマスタの起動中に sync したり optimize したりできるようになった。
EstraierPure_Node::sync() / Services_HyperEstraier_Node::sync()EstraierPure_Node::optimize() / Services_HyperEstraier_Node::optimize()
- ノードの管理者およびユーザのリストを配列として取得できるようになった。
EstraierPure_Node::admins() / Services_HyperEstraier_Node::getAdmins()EstraierPure_Node::users() / Services_HyperEstraier_Node::getUsers()
- Node クラスでスニペット全体の幅が指定できないバグを修正。
-
EstraierPure-0.3.0.tgz (beta) /
Services_HyperEstraier-0.3.0.tgz (beta)
- Hyper Estraier 1.2.9 の estraierpure.rb 相当にアップデート。
- 補助インデックスの結果を採用する許可を指定できるようになった。
EstraierPure_Condition::set_auxiliary() / Services_HyperEstraier_Condition::auxiliary()
- ノードのキャッシュ使用率を取得できるようになった。
EstraierPure_Node::cache_usage() / Services_HyperEstraier_Node::cacheUsage()
-
EstraierPure-0.2.8.tgz (beta) /
Services_HyperEstraier-0.2.8.tgz (beta)
- Conditon クラスの文書に属性を追加できないバグを修正。
-
EstraierPure-0.2.7.tgz (beta) /
Services_HyperEstraier-0.2.7.tgz (beta)
- Hyper Estraier 1.1.4 の estraierpure.rb 相当にアップデートし、Conditon クラスのセッターで $max/$skip が 0 以上であるかどうかチェックするようにした。
- PHP 4.3 対応版の
EstraierPure_Condition::skip()に誤って public スコープ宣言を付けていたのを修正。
-
EstraierPure-0.2.6.tgz (beta)
- skip パラメータが無視されるバグを修正。
-
EstraierPure-0.2.5.tgz (beta) /
Services_HyperEstraier-0.2.5.tgz (beta)
- Conditon クラスを Hyper Estraier 1.1.3 で実装された skip パラメータに対応させた。
EstraierPure_Condition::{skip,set_skip}()Services_HyperEstraier_Condition::{get,set}Skip()
- Services_HyperEstraier で間違ったメソッドを呼んでいたのと、DocBlock コメントのミス、Typo を修正。
- Conditon クラスを Hyper Estraier 1.1.3 で実装された skip パラメータに対応させた。
-
EstraierPure-0.2.4.tgz (beta) /
Services_HyperEstraier-0.2.4.tgz (beta)
- PHP 5.1 専用版では配列を引数にとるメソッドでタイプヒンティングを使うようにした。
- EstraierPure_Node/Services_HyperEstraier_Node で文書の属性を取得するメソッドが誤ったクエリを発行していたのを修正。
-
EstraierPure-0.2.3.tgz (beta) /
Services_HyperEstraier-0.2.3.tgz (beta)
- EstraierPure_Document/Services_HyperEstraier_Document のコンストラクタで文書ドラフトから属性を正しく抽出できなかったバグを修正。
-
EstraierPure-0.2.2.tgz (beta) /
Services_HyperEstraier-0.2.2.tgz (beta)
- Hyper Estraier 1.1.3 の estraierpure.rb 相当にアップデートし、Document クラスにキーワードを設定/取得するメソッドを追加。
EstraierPure_Document::{keywords,set_keywords}()Services_HyperEstraier_Document::{get,set}Keywords()
- Typo を修正。
- Hyper Estraier 1.1.3 の estraierpure.rb 相当にアップデートし、Document クラスにキーワードを設定/取得するメソッドを追加。
-
EstraierPure-0.2.1.tgz (beta)
- PHP 4.3 対応版で
&EstraierPure_Utility::errorstack()の参照返しに関するエラーを修正。
- PHP 4.3 対応版で
-
EstraierPure-0.2.0.tgz (beta) /
Services_HyperEstraier-0.2.0.tgz (beta)
- ストリーム関数に対応。定数
ESTRAIERPURE_USE_HTTP_STREAM(orSERVICES_HYPERESTRAIER_USE_HTTP_STREAM) が真のとき PEAR::HTTP_Request の代わりにストリーム関数を使ってノードサーバと通信する。 - エラーハンドリングに PEAR_ErrorStack を使うようにした。エラースタックは
&EstraierPure_Utility::errorstack()(orServices_HyperEstraier_Utility::getErrorStack()) で取得できる。 - POST する際に Content-Type ヘッダが正しく設定されず、文書が登録できなくなっていたバグを修正。
- バージョンアップに併せてサンプルプログラムを追加修正。
- PEAR Installer に対応。(Channel は暫定的に pear.php.net)
- ストリーム関数に対応。定数
-
estraierpure-0.1.0 / Services_HyperEstraier-0.1.0
- PHP4 対応版 (旧 estraierpure.php4) を estraierpure.php に、PHP5 対応版 (旧 estraierpure.php) を estraierpure.php5 に、それぞれリネーム。
- 引数の型チェックまわりを少し変更。
__get()メソッド経由での private なメンバ変数へのアクセス、SPL の InvalidArgumentException クラス等を使うため、estraierpure.php5 の PHP 5.0 サポートを廃止し、PHP 5.1 専用に変更。
-
estraierpure-0.0.6.tgz
- Hyper Estraier 1.1.1 の estraierpure.rb 相当にアップデート。
- PHP4 用のライブラリ estraierpure.php4 を同梱(PHP5 用と同じクラス名)。
-
estraierpure-0.0.5.tgz
- 著作権者の表記を平林さんから rsk に変更。
- ライセンスを LGPL から BSDL に変更。
- Docblock コメントを修正。
-
estraierpure-0.0.3.tgz
- Docblock コメントを修正。
-
estraierpure-0.0.4.tgz
- クラス構成を変更。Docblock コメントを修正。
-
estraierpure-0.0.2.tgz
- イテレータを PHP 5.0.x でも利用できるようにした。
-
estraierpure-0.0.1.tgz
- 最初のリリース。
- PEAR の HTTP_Request パッケージが必要。
Stream_Filter_MBString
ストリームフィルタの習作として mb_convert_*() 系関数を使ったものを作ってみました。PHP 5.1 専用です。使い方は examples ディレクトリにあるサンプルを見てください。
文字コード変換には convert.iconv.* フィルタが既にあり、変換元のエンコーディングが分かっていて、かつそのエンコーディングの仕様にない文字が含まれていないことが保証されているならそれで十分なのですが、convert.mbstring.* フィルタは自動判定ができる、変換マップに無いシーケンスがあってもエラーとならない *2 といった特徴があります。
API Documents
Downloads
-
Stream_Filter_MBString-1.0.0RC2.tgz (beta)
- 文字コード変換フィルタが
php://filter形式の URL に記述できるように、入力/出力文字コードの区切り文字としてスラッシュ (/) に加えてコロン (:) も使えるようにした。スラッシュを残しているのはconvert.iconv.*互換のため。 STREAM_FILTER_MBSTRING_AUTO_REGISTER定数が定義されているときは、クラス読み込みと同時にフィルタを登録するようにした。- 読み出し、多段フィルタなど、使用例を増やした。
- PEAR Installer に対応。(Channel は暫定的に pear.php.net)
- 文字コード変換フィルタが
-
Stream_Filter_MBString-1.0.0RC1
- 最初のリリース。
Stream_Filter_Hash
ストリームフィルタの習作・第二段として ハッシュ関数を使ったものを作ってみました。PHP 5.1 専用です。使い方は examples ディレクトリにあるサンプルを見てください。
現状ではストリームへの書き込みには適用されますが、読み出しには適用されないようです。
余談になりますが、PHP の Hash Context リソースは hash_update() により逐次データを追加できるものの、複製することで途中までの計算結果を共有できない上に、一度 hash_final() したらそれ以降はデータを追加できないのはどうかと思います。Perl の Digest 系モジュール、Pyhotn や Ruby の MD5 等では当たり前のようにできていることなので、ぜひ改善してほしいところです。
API Documents
Downloads
-
Stream_Filter_Hash-0.0.1.tgz (alpha)
- 最初のリリース。
- PEAR Installer に対応。(Channel は暫定的に pear.php.net)
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 から強い影響を受けています。