PHP(正式名称PHP: Hypertext Preprocessor)は,Rasmus Lerdorf氏により1996年に開発・公開されたオープンソースのスクリプト言語である。Webアプリケーション用途として世界中の1300万ドメインを越えるWWWサーバー上で広く使用されており,現在もオープンソース・コミュニティにより精力的な開発が行われている。同じくオープンソースで人気のあるWWWサーバーApacheや,多くのリレーショナル・データベース・システムとの連携に優れ,初心者にも分かりやすい言語として定評がある。

 このコラムでは,PHPの最新状況を報告していく。

 現在,PHPはバージョン4がリリースされており,最新版は8月にリリースされたPHP 4.3.3である。また,次期メジャーリリースバージョンであるPHP 5の開発も進んでおり,本年6月にベータ1がリリースされている。PHP5のリリース予定は公式にはアナウンスされていないが,このまま順調に開発が進めば,本年末もしくは来年早々にリリースされる予定である。

 さて,今回の「PHPウォッチ」の内容であるが,初回ということでまずPHPの魅力の源泉であるその設計思想についてとりあげた。最近の話題としては,最新のリリースであるPHP 4.3.3での変更点と,ライセンス関連の話題についてまとめた。なお,変更点が多いPHP5に関しては,次回以降順次とりあげる予定である。

PHPの設計思想は“面倒な問題を簡単に”

 Webアプリケーションの特徴は,一度リリースしたら変更がほとんど行われない一般的なソフトウエアと異なり,比較的短期間で開発され,リリース後にも頻繁に変更が行われることにある。多くのWebアプリケーションは,種々のニーズを満たすために複雑化する傾向がある。PHPの原作者であるRasmus Lerdorf氏は,以下のように述べている。

 「Webアプリケーションに関する面倒な問題を,きれいに解決することは困難だ。PHPの目的は,この問題を“簡単に”解決することにある。」

 このRasmus氏の言葉は,PHPの設計思想を表すものと言えるだろう。読者は,Webアプリケーションの複雑さをJava言語などを用いてオブジェクト指向的手法で解決することができると考えるかもしれない。この方法は,十分な開発期間と,十分なスキルを有するJavaプログラマがいれば,成功するであろう。しかし,こうした理想的な開発リソースが与えられるプロジェクトの方が少ないのではないだろうか?

 PHPは,初心者に分かりやすい言語として設計され,様々なニーズに応えることができるように,データベースをはじめとする多くの外部リソースへのインターフェイスを備えている。この設計思想は今後とも変わることがないだろう。限定された開発リソースの中で頻繁に変更を繰り返す一般的なWebアプリケーションの開発にPHPが多く使用されている最大の理由はこの設計思想にあると思われる。

マルチバイト機能のLGPLライセンス違反問題に対応

 PHPに関する最近の話題として,マルチバイト機能を実装するmbstringに指摘された,オープンソース・ライセンスの不整合に基づく問題と,それに対する対応について解説する。

 オープンソースのソフトウエアにおいては,再配布や使用をほぼ自由に行うことができるが,個々のソフトウエアは各々のライセンスのもとに配布されており,著作権が発生しているため,配布条件に注意をする必要がある。

 オープンソースのソフトウエア・ライセンスには,多くの形態が存在する。代表的なものは,GPL(GNU General Public License),LGPL(GNU Lesser General Public License),BSDライセンスなどである。オープンソースのソフトウエアでは,機能拡張のために他のソフトウエアの機能の一部を利用することがよく行われるが,この際に問題となるのが,ライセンスの互換性の問題である。

 PHPにおいても,PHP4においてバンドルされていたMySQLのクライアント・ライブラリが,GPLの厳格な適用に伴ってPHP5のバンドルから外されている。これは,PHPがPHPライセンス(変更部分に関するソースコード開示義務がない等,比較的制約が緩いBSDライクランセンス)に基づき配布されており,変更部分に関するソースコード開示義務が発生するGPLとの互換性がないためである。

 最近,PHPのマルチバイト拡張モジュールmbstringにおいてもこのライセンス互換性の問題が指摘された。これは,mbstringの文字コード変換エンジンとしてバンドルされ,使用されている文字コード変換ライブラリmbfilterのライセンスの配布条件がLGPL(ライセンスの具体的内容についてはGNU Lesser General Public License[日本語訳]を参照)であることに関係する。

 具体的には,LGPLライセンスのライブラリを他のソフトウエアと共に配布する場合,改変されたもの自体がソフトウエア・ライブラリであること,本来のライブラリとしての機能が動作することが要件となっているのに対し,参照となるオリジナルのライブラリとの実装のかい離が大きく,この要件が満たされていないことが問題とされた。これは,PHPへマルチバイト文字関連の機能がマージされて以降,多くの開発者により,改良やバグ修正が行われてきたことによるものである。

 このライセンス上の問題を解消するため,著作権者を含めた議論の結果,mbfilterをライブラリとして独立させ,libmbflとして配布するとともに,このlibmbflをPHPにバンドルする形で配布する形に変更することが決められた。

 今後のPHPのリリースにおいて上記の変更が行われるが,既にPHP5の開発用コードではこの変更が行われており,正式リリースに向けてテスト中である。また,PHP4についても実装が行われ,パッチ形式でのテスト配布が行われている。

 なお,現行のバージョン(PHP 4.3.x)の使用および配布については,新しい実装が安定するまでに要する時間と,ユーザーの利便性を考慮し,著作権者から許可が得られているために問題はない。

 また,同じくmbstringにバンドルされているマルチバイト正規表現ライブラリであるmbregexに関してもLGPLライセンスでの配布となっているため,同様の問題が指摘された。この結果,mbregexについてはLGPLの要件は満たされており,問題はないと判断された。なお,PHP5では,より高機能でPHPライセンスと親和性の高いマルチバイト正規表現ライブラリ「鬼車」への移行が予定されている。ただし,現行の実装に対して仕様が若干異なる部分があるため,現在のところ,PHP4における「鬼車」への移行は予定されていない。

 これらの変更においては,過去のバージョンとの上位互換性や実装の安定性が重視されることとなっている。以上のライセンス問題に関しては,日本PHPユーザー会のWebサイトに「mbstringのLGPLライセンス違反問題に関する見解」という文書が公開されており,本件の詳細な経緯が報告されているので参照されたい。

 ライセンスに関しては,著作権者の意思が最優先であるということは,言うまでもない。オープンソースのソフトウエアは,有用なソフトウエアを広く利用してもらうという意思のもとに公開されているが,ライセンスの問題となると,当該ソフトウエアの公開を中止したり,テストが十分でない不安定な実装に切り替えたりといった手段がとられる可能性もある。こうした策は,ユーザーの利便性を損ねるだけでなく,著作権者の本来の意思にも合致しない可能性がある。本件はまだ解決の途上にあるが,著作権者の理解が得られたことにより,ユーザーの利便性を損ねることなく,問題を解決する例と言えるだろう。

PHP 4.3.3で内部文字エンコーディングなどに変更

 続いて,最新リリースであるPHP 4.3.3の変更点について概説する。

 このバージョンにおける変更点の多くはバグ修正である。ユーザーは,現在使用しているアプリケーションで問題が生じないことを確認した上で,このバージョンにアップデートすることが望ましい。このバージョンにおける大きな変更点はあまりないが,過去のバージョン(PHP 4.3.0~PHP 4.3.2)において,特定の環境でセーフモードを無効にできてしまうバグが修正されている。

 また,日本語関連では,ファイルアップロード(下記のようにフォームでenctype="multipart/form-data" を指定してPOSTした場合)に,フォーム変数の内部文字エンコーディングに関する仕様が変更されている。

ファイル送信:

 従来のバージョンでは,enctype=" multipart/form-data"が設定されていない場合には,フォーム変数の文字コード変換が自動変換が行われていたが,enctype=" multipart/form-data"が指定された場合には対応していなかった。この変更により,Windows環境からファイルをアップロードする際に発生していたファイル名(下記のフォーム中で)の文字化けの多くは解消されると期待される。この文字化けは,シフトJISでエンコードされたファイル名に0x5cが含まれていると,ディレクトリのセパレータ('\')と区別できなかったために発生していた。この文字コードの自動変換は,設定ファイルphp.iniで mbstring.encoding_translation=On と設定されている場合のみ行われることに注意が必要である。

 なお,フォームで multipart/form-data を指定した場合,フォーム変数の値については,自動変換されるが,name の部分については変換されないため注意が必要である。この部分については,nameの部分についても変換されるように,将来のバージョンで変更される可能性がある。

 また,今回のバージョンでの変更点ではないが,PHP 4.3.0以降,日本語以外のマルチバイト文字(中国語,韓国語)がサポートされたことに伴い,日本語を使用する場合には,設定ファイルphp.iniで以下の設定が必須となっている。

 mbstring.language=Japanese 

 特に,以前からPHPを使用しているユーザーでPHPスクリプトからのメール送信などでトラブルを発生している場合には,php.iniの設定を確認してほしい。  なお,PHP 4.3.3における変更の詳細は,こちらにに記載されているので参照してほしい。

 今回は初回ということもあり,PHPの紹介も兼ねて,全般的な開発の流れやライセンス上の問題などについて紹介した。次回以降では,PHP5の新機能や,関連するトピックスなどを順次紹介していく予定である。

廣川類(Rui Hirokawa)

・日本PHPユーザ会からのアナウンス(2003年8月~9月25日)

PHP 4.3.3 のRelease Announcementの和訳およびPHP 4.3.3 のChangeLogの和訳を公開(2003年8月26日)

PHP 4.3.3リリース

PHPのマルチバイト拡張モジュールmbstringのLGPLライセンス違反問題についての経緯と現状に関するページを公開(2003年8月23日)

・PHPカンファレンス2003(2003年8月30日開催)のページを公開(プログラム詳細および講演資料)。


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