今回は,間もなくリリースされるPHP 4.3系の新バージョン4.3.5における変更点とPHP5の開発状況,その他のPHP関連のトピックスについて解説する。

PHP 4.3.5がリリースプロセスに

 PHP 4.3系列の最新版4.3.4が2003年11月03日にリリースされ,引き続いて,4.3.5がリリース・プロセスに入っている。4.3.5RC1(リリース候補1版)が2004年1月12日に公開されており,順調にテストが行われれば2004年1月末には正式に公開される予定となっている。本バージョンには,セキュリティ上の問題などのクリティカルな修正は含まれない見込みである。しかし,多くのバグが修正されているため,PHP 4.3系を使用しているユーザーはバージョン・アップすることが望ましい。ただし,移行に際しては十分な確認が必要である。

 なお,PHP 4.3系のリリース・マネージャであるIlia Alshanetsky氏によれば,PHP5の開発も進んでいることから4.3.5が4.3系の最後のリリースとなる見込みである。

 以下にPHP 4.3.5における主な変更点を紹介する。

4.3.5では70カ所以上のバグを修正

 PHP 4.3.4のリリース以降,比較的マイナーではあるものの70カ所以上のバグが修正されている。

 マルチバイト文字関連としては,mb_convert_variables()によりコピーされた配列変数の文字コードを変換すると,コピー前の配列変数の文字コードまで変換されてしまうというバグ(下の再現コード参照)があったが,PHP4.3.5では修正されている。

$a = array("日本語"); // 文字列(EUC-JP)を含む配列
$b = $a; // 配列をコピー
mb_convert_variables("SJIS",mb_detect_order(),$b);
var_dump($a); // SJIS(異常:正しくはEUC-JPのまま)
var_dump($b); // SJIS(正常)
?>
 なお,PHP4.3.5RC1で修正されたバグの詳細については,php.netのニュース(http://cvs.php.net/co.php/php-src/NEWS?login=2&r=1.1247.2.522)を参照されたい。

イメージ生成や正規表現ライブラリが更新

 PHPには,機能実装に必要な複数のライブラリがバンドルされている。PHP4.3.5ではそのうちのいくつかが最新版に更新される。

(1) イメージ生成ライブラリGD:2.0.15→2.0.17
(2) Perl互換正規表現ライブラリPCRE:4.3 → 4.5

また,Windows版配布ファイルにバンドルされているライブラリも更新される。

(1) PostgreSQLクライアントライブラリ:7.4に更新
(2) OpenSSLライブラリ:0.9.7cに更新

PHP 5.0ベータ3がリリース

 PHP 5.0β3は当初の予定からやや遅れ,2003年12月21日にリリースされた。β3ではβ2に対してバグ修正や若干の機能追加が行われている。今後は,新機能の追加は基本的に行わずにバグ修正を集中的に行うことになっており,リリース候補版(RC1)が近日中にリリースされる予定である。

 β3においては多くのバグが修正されているが,機能追加も行われている。主な変更点を以下に紹介する。なお,β2からの変更点の詳細については,ChangeLog(http://www.php.net/ChangeLog-5.php#5.0.0b3)を参照されたい。

tidyによるHTML誤り訂正機能追加

 Webページを作成する際,HTMLの構文の誤りがしばしば発生してしまう。若干の構文ミスについては,WWWブラウザが適当に解釈してくれるため,従来は大きな問題を発生しなかったが,XHTMLが普及するにつれ,より厳格にHTML構文を守る必要性が生じている。Tidy (http://tidy.sourceforge.net/) は,HTMLの誤りを自動的に修正してくれるユーティリティである。Tidyの機能がβ3からPHP5に取り込まれ,PHPスクリプトから使用可能になった。例として,以下のHTMLファイル(test.html)を見てみよう。

test.htmlの内容

このHTMLは,間違っています!

 このHTMLファイルには,タグの対応などについて複数のHTML構文上の誤りがある。これを修正して出力するPHPスクリプトは以下のようになる。
$tidy = tidy_parse_file("test.html","","raw"); // HTMLファイルを読み込み
$tidy->clean_repair(); // HTML構文を修正
echo $tidy; // 修正されたHTMLファイルを出力
?>
 上記のスクリプトの出力は,以下のようになる。HTML構文の誤りが修正されていることが分かる。






このHTMLは,間違っています!




 なお,Tidyの機能を利用するには,PHP5に付属する拡張モジュールtidyの機能を有効にしておく必要がある。具体的には,PHP構築時にconfigureにオプション--with-tidyを追加する。上記の例では,外部のHTMLファイルを修正しているが,php.iniに「output_buffer = ob_tidyhandler」と指定することで出力を自動的に修正・変換することも可能である。

 Tidyは,XHTMLへの変換や余分な改行コードの削除など豊富な機能を有しており,新旧のブラウザや携帯電話などの複数のクライアントをサポートするアプリケーションで特に有用であろう。

iconvモジュールが強化

 PHPのマルチバイト関連の機能はmbstring拡張モジュールに実装されており,広く利用されているが,文字コード変換の機能については,多くのプラットフォームをサポートするiconvも利用できる。iconvはPHP4から利用できたが,PHP5ではPHPストリームに対応するなど,機能が強化される。iconvのPHPストリーム(convert.iconv)を利用することにより,読み込んだファイルの文字コードをシフトJISからEUC-JPに変換して出力する例を以下に示す。

$fp = fopen('test.html','r');
stream_filter_append($fp,'convert.iconv.SHIFT_JIS/EUC-JP');
print fread($fp,filesize('test.html'));
fclose($fp);
?>
 iconvは,使用するプラットフォームにより実装が異なり,中には問題がある実装も含まれているという問題もあるが,システムで標準的にサポートされ,多くの文字エンコーディングをサポートするなどの利点がある。システムの標準ライブラリに含まれるiconvの実装に問題がある場合でもGNU libiconvを利用することで問題なく文字コード変換を行うことができるため,PHP5では広く利用されるようになるだろう。

高機能キャッシュ拡張モジュールとMMCacheの開発状況

図1●コード・キャッシュの仕組み
 PHPスクリプトが実行される際には,PHPスクリプトのファイルがディスクからロードされ,内部コードにコンパイルされてから実行される。この際,ファイルの読み込み,コンパイルには時間を要し,サーバーCPUへ負荷を与えることとなる。コンパイル済みのスクリプト・コードをメモリー(およびファイル・システム)にキャッシュする「コード・キャッシュ」を行うことで,サーバーの負荷を低減し,実行を大幅に高速化することができる。(図1[拡大表示])

 コード・キャッシュの機能は,PHPまたはPHPのスクリプト・エンジンであるZendエンジン用の拡張モジュールとして提供され,複数の実装がある。高性能な実装として使用されているものを以下に紹介する。

1. Zend Performance Suite (http://www.zend.com/)
 PHPのスクリプトエンジンを開発しているイスラエルZend Technologiesが開発・販売している。キャッシュの実装のなかで最も優れた性能を示す。
2. The ionCube PHP Accelerator (http://www.ioncube.jp/)
 オープンソースではないが無償で使用できる。Yahoo!で採用されたことで注目されたが,過去1年以上バージョン更新されていない。
3. Alternative PHP Cache (http://pecl.php.net/package/APC)
 オープンソースの実装であり,現在は,PHP拡張モジュール用の標準レポジトリであるPECL(ピクル)から入手できる。
4. Turck MMCache (http://turck-mmcache.sourceforge.net/)
Turck Software St. Petersburg(ロシア)のDmitry Stogov氏が開発するオープンソース(GPLとして配布)のキャッシュ・モジュールである。Zend Performance Suiteと並んで最高レベルの性能を示しており,PHPスクリプトのコードを隠蔽するエンコーディング機能も有するなど,高機能である。

図2●コード・キャッシュの効果
 キャッシュの具体的な効果を見るためにオープンソースの実装(MMCacheおよびAPC)に関して実施したベンチマークテスト結果を図2[拡大表示]に示す。テストには,実際のアプリケーションの例としてMySQL管理用ユーティリティphpMyAdminのトップページを使用し,同時接続ユーザー数をパラメータとして計測を行った。テスト条件を以下に示す。

実施環境:Linux 2.4.22 (Fedora Core 1) + Apache 2.0.48 + PHP 4.3.5RC1
実行環境:Athlon 1.2MHz,RAM: 256MB
テスト項目:ApacheBenchによりリクエスト数/秒を計測(試行回数:各100回)
実行アプリケーション:phpMyAdmin 2.5.5pl1 (http://www.phpmyadmin.net/home_page/)

 図2[拡大表示]を見ると,キャッシュを使用しない場合と比べて4倍以上高速化されていることが分かる。高速化される度合いはアプリケーションにより異なるが,高性能なコード・キャッシュの実装では,数10%から数倍高速化されると思われる。

MMCacheの開発が中断される?

 MMCacheは,PHPの最新版へ対応するなど,オープンソースの実装として現在最も優れた性能を示しており,注目されているが,昨年末に開発者のDmitry Stogov氏が突然開発を中断することを発表した。経緯の詳細についてはMMCacheのサポートフォーラム(http://sourceforge.net/forum/forum.php?thread_id=986362&forum_id=236228)を参照されたい。Dmitry Stogov氏は,現在,Zend社に移りPHP用SOAP拡張モジュールの実装などを行うなど,PHPの開発に精力的に携わっている。宙に浮いてしまった感のあるMMCacheであるが,開発を継続するために開発者が募られており,引き続き,公開とメンテナンスが行われる見込みである。

 優れたプログラムの開発者であっても金銭的なバックボーンがないオープンソースの世界では,開発の継続に困難を生じる場合があることが示されたわけだが,他の開発者により開発が継続されうることは,オープンソースの利点と言えるだろう。

 今回は,PHP4およびPHP5の開発状況および関連するトピックスとしてキャッシュ・モジュールの話題について解説した。次回以降もPHPに関する最新の情報をお届けする予定である。

廣川類(Rui Hirokawa)



■著者紹介 廣川類(ひろかわ・るい)氏

 PHPがまだPHP/FIと呼ばれていた1996年にPHPに出会い,以降,ドキュメント翻訳や国際化にかかわっている。著書に『PHP4徹底攻略』(ソフトバンクパブリッシング),『PHP4徹底攻略実戦編』(ソフトバンクパブリッシング)などがある。日本PHPユーザー会(2000年4月設立)ドキュメント部門幹事。