PHPの次期メジャー・リリースにあたるPHP5が開発中である。今回は,PHP5におけるXMLサポートの強化点とPHP関連のその他のトピックスについて紹介する。

PHP5ベータ3版が間もなくリリース

 本稿執筆時点では,PHP5ベータ3版が間もなくリリースされることになっている。今後は新機能の追加は基本的に行わずにバグ修正を集中的に行う予定であり,早期の正式リリースを目指している。ただし,正式リリースが来年となることは間違いないだろう。11月末にコア開発者であるAndi Gutmans氏から,「PHP4上でユーザーが使用しているアプリケーションに関してPHP5との互換性を確認してほしい」とのアナウンスが行われた。正式リリースに向けて広範な環境でテストが行われ,安定したリリース版となることが望まれる。

 一方,PHP4はPHP4.3.4が11月3日に正式リリースされた。この後も,種々のバグ修正作業が行われており,次のマイナー・バージョンアップにあたるPHP4.3.5にとりこまれる予定となっている。

直感的にXMLデータにアクセスできるSimpleXML

 XMLは,汎用のデータ・コンテナなどの様々な用途で使用されている。PHPはWebアプリケーション構築用のスクリプト言語としてHTMLでの使用をメインに設計されているが,XMLを早くからサポートしている。PHP4では,XMLの標準的インタフェースであるDOM,SAXがサポートされ,また,スタイルシートに基づきXMLデータの変換を行うXSLTもサポートされている。

 PHP5においては,XMLのサポートも強化される。表1にPHP4とPHP5のXMLサポートの違いを示す。PHP4では,DOMインタフェースが独自の実装に基づいていたが,PHP5では標準的なDOMインタフェースへと変更される。この変更に伴い,Javaなどで書かれたコードの移植は容易になるであろう。反面,PHP4で書かれたDOMを処理するコードは修正が必要となる。

 また,PHP5ではSimpleXMLと呼ばれるXML処理用インタフェースが新たにサポートされる。SimpleXMLは,文字通り直感的にXMLデータにアクセスできるインタフェースを提供するもので,XMLデータをPHPのオブジェクトへ自動的にマッピングさせることができる。このため,DOMを使う場合のようにXMLデータ・ツリーを再帰的に処理する必要がない。

表1●PHP4とPHP5のXMLサポートの違い

PHP4PHP5
DOMLibxml2により実装。インタフェースは標準DOMに基づいていなかった。libxml2により実装。標準DOMインタフェース(レベル3相当)をサポートする。
SAX Expatにより実装。libxml2により実装。
XSLTSablotronにより実装。libxsltにより実装。
スキーマ検証 標準ではサポートしない。必要ならユーザーが独自に実装する必要があった。 DTD,XML Schema,RelaxNGに基づく検証をサポートする。

例えば,以下のような簡単な内容のXML文書book.xmlを処理することを考えてみよう。

リスト1●book.xml




 PHP4徹底攻略(改訂版)
 堀田,石井,廣川


 PHP4徹底攻略(実戦編)
 廣川,桑村,小山
 


 「PHP4徹底攻略(実戦編)は,廣川,桑村,小山により執筆されました。」のような出力を得るコードをDOMインタフェースを用いて記述するとリスト2のようになる。

リスト2●dom.php
 $dom = new domDocument;
 $dom->load('book.xml');
 $root = $dom->documentElement;
 $books = $root->childNodes;
 foreach ($books as $book) {
  if (@$book->nodeName == 'book') {
   $content = $book->childNodes;
   foreach ($content as $elem) {
   if (@$elem->nodeName == 'author') {
$author = $elem->nodeValue;
   }
   if (@$elem->nodeName == 'title') {
$title = $elem->nodeValue;
    }
  }
  print "$title は,$author により執筆されました。
";
  }
  }
?>
 一方,SimpleXMLを用いて記述するとリスト3のようになる。任意のXMLデータにより簡単にアクセスできることが一見して分かるであろう。すべてのXMLデータをPHPのデータに自動的にマッピングできるわけではないが,多くの場面で便利に使用できるであろう。なお,SimpleXMLとDOMデータの相互変換も可能である。

リスト3●simplexml.php
$books = simplexml_load_file('/tmp/book.xml')->book;
foreach ($books as $book) {
 print "{$book->title}は,{$book->author} により執筆されました。
";
}
?>
 また,PHP5では,DTD,XML Schema,RelaxNGに基づくXML文書の検証が可能となる。XML Schemaに基づく検証を行うコードを以下に示す。

リスト4●XML検証コード
$dom = new domDocument;
$dom->load('book.xml'); // XML文書読み込み
if (!$dom->schemaValidate('book.xsd')) { // XML Schemaに基づき検証
  print "この文書はスキーマ定義に違反しています。";
}
?>
 PHP4では,XML処理用ライブラリとしてexpatlibxml2を使用していたが,PHP5では,高機能なlibxml2に集約されている。XML Benchmarkによれば,libxml2は商用を含む同機能のライブラリと比較して最も高速な部類に入っている。処理性能の向上と機能面の充実により,PHPを使用したXMLアプリケーションが今後本格的に普及すると予想される。

 なお,XMLを基盤とした主要なカテゴリにWebサービスがあるが,こちらについては,次回以降に紹介したい。

PHP5とPHP4の性能は同程度,ベンチマーク結果が公表される

 11月半ば,PHPの処理速度を表す各種ベンチマーク・テストをPHPの各バージョンで行った結果がSebastian Bergmann氏により公開された。筆者も公開されたコードを用いて同じテストを行ってみた(図1[拡大表示])。

図1●PHPベンチマーク・テスト結果
(Windows XP Pro,Pentium III-M 866MHz)
 図の縦軸は1秒ごとの処理回数を表し,数字が大きい方が性能が高いことを示している。この結果を見ると,以下のようなことが分かる。

1. PHP3とPHP4/PHP5の性能差は非常に大きい。
2. PHP4の各マイナーバージョンにおける性能上の差異は小さい。また,必ずしもバージョンが上位のものが優れた性能を示すわけではない。
3. PHP5とPHP4の性能は同程度である。

 最後の結果に関して,オブジェクト生成のベンチマークでも性能改善がみられないのは,やや意外の感があるが,テスト用のコードで使用されているクラスの定義が非常に簡単なものであったことが関係している可能性もある。

PHP5に軽量DBのSQLiteがバンドル

 PHP5には,軽量型のリレーショナル・データベース・ソフトウエアであるSQLiteがバンドルされる。

 SQLiteは,本格的なRDBMSと異なり,クライアント/サーバー型の構成ではなく,データが直接ファイルに保存されるファイル記録型のデータベースである。標準クエリ言語であるSQL92をサポート(一部機能は未サポート)するため,修得は容易である。SQLiteは,PostgreSQLやMySQLの2倍以上高速に動作すると言われており,データ型が基本的になく,整数を表す型以外はすべて文字列型とみなされることが特徴である。通常のSQLをサポートするデータベースではデータ型がサポートされることが普通であるため,注意が必要である。なお,CREATE TABLEの宣言において,BLOB,CHAR,CLOB,TEXTが現れないカラムは,数値型であるとみなされる。

 データを保存する手段が標準でバンドルされることは,ユーザーが掲示板ソフトウエアなどのデータ記憶領域を必要とするアプリケーションをより容易に構築できるようになるというメリットがある。PHP4では,従来よりMySQLのクライアント・ライブラリがバンドルされていたが,別途,MySQLデータベース・サーバーをインストールする必要があった。SQLiteはそのままでデータベースとして使用できるため,別途,他のソフトウエアをインストールする必要はない。  SQLiteは,文字コードとしてISO8859-1(デフォルト)とUTF-8をサポートする。文字コードは,SQLiteをコンパイルする際に指定する必要がある。日本語などのマルチバイト文字を使用するユーザーは,UTF-8を指定する必要がある。

 なお,従来よりバンドルされていたMySQLのクライアント・ライブラリは,MySQLが商用ライセンスとGPLのデュアル・ライセンスを厳格に適用することとなったため,PHP5にはバンドルされないことになっている。

 今回は,PHP5におけるXMLサポートおよびSQLiteバンドルの話題と,その他のトピックスについて紹介した。次回以降では,引き続きPHP5の新機能や,PHP関連のトピックスを順次紹介していく予定である。

廣川類(Rui Hirokawa)

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