PHPカンファレンス2007 レポート

基調講演「PHPのいまとこれから2007」

カンファレンスの開幕と共に最初に登壇したのは、昨年に続き、日本PHPユーザ会の廣川類氏。基調講演として「PHPの今とこれから2007」と題して、PHPの現状と今後の動向についてのお話をいただきました。

PHPの現状

基調講演

PHP言語は誕生してから10年ほど経ちますが、世界中のインターネットWebサイトで使用されるようになり、Nexen Service(www.nexen.net)の調べでは34%のシェアを占めると報告されています。

2004年7月にオブジェクト指向機能が強化されたPHP5.0がリリースされましたが、スピードが遅い等の理由により普及が遅れていました。とはいうものの、PHP5.1での機能改良、PHP5.2でのメモリの改良を経て、現在では、充分PHP4に勝るようになったと言われています。

また、2年前から開発が始まったPHP6はUnicode対応による国際化が注目されていますが、この機能を実装するために言語の中身を大幅に書き換える事態となり、リリースが遅れています。また、この遅れを受けて、当初PHP6から導入される予定であった一部の機能をPHP5.3に導入し、リリースしようという話が進んでいます。

PHP4のサポートの停止

基調講演

PHP4のサポートは、2007年12月31日で停止、重要なセキュリティ・パッチに関しても2008年8月8日をもって提供が終了されるとアナウンスされました(www.php.net)。よって、その前に現状動いているシステムをPHP5にアップデートする必要があります。Nexen Serviseでは、現在75%程度のPHPシステムがPHP4で稼働していると報告しています。

PHP5に移行を促すプロジェクトとして、「GoPHP5」が展開されています。このプロジェクトは、2008年2月5日までに、アプリケーション開発者やホスティングサービス業者に、PHP5.2以上をサポートするように呼びかけるものです。既に、PEAR2では、PHP5.2以降のみをサポートすると表明しています。

移行の際に役立つツールとして、E_STRICTによる構文チェックや、PHP5のZend Engine1 互換モードがあります。他、PHPマニュアルに下位互換性がない変更点が記載されているので、こちらも参照してください。

また、日本でもPHP5に関連した移行サービス(アシアル社)移行に関する情報(gihyo.jp)PHP5スキル認定(Zend PHP5 Certification)なども登場しています。

PHP5.2/PHP5.3M

基調講演

PHP5.2は、一番新しい実用バージョンであり、2006年11月にリリースされました。PHP5.2では、

  • 更なる高速化を目的とした改良
  • メモリ管理の効率化
  • filter、JSON などのエクステンションサポート
  • 個々の機能改良

が行われました。

PHP6のリリースが遅れていることもあり、来年2008年1月ぐらいに、PHP5.3のプレリリースが予定されています。このPHP5.3に実装される機能はまだ確定していませんが、PHP6用に現在開発中のUnicode対応以外の機能が候補として挙げられています。たとえば、

  • ICUエクステンション:PECL/INTL
  • OpenSSLエクステンションにOpenIDサポートを追加
  • 名前空間

などです。

また、PHP4と比較して、パフォーマンスが低いと言われていたPHP5ですが、PHP5.1/PHP5.2の高速化への改良により、ベンチマークテストでも、PHP4.4と比べて高速であるという結果がでています。

PHPのセキュリティ問題

基調講演

ここ数ヶ月のセキュリティの話題について簡単に取り上げます。

Hardened php project
Stefan Esser氏が主宰するプロジェクト。PHPのセキュリティ情報や独自のセキュリティ強化パッチ(Suhosin)を公開。
Suhosin
上記プロジェクトで公開されている、PHPセキュリティ強化パッチ。
Month of PHP Bugs(MOPB)
PHPコアの脆弱性情報や、POCコードを公開。危険性を認識させるために公開されたが、同時にそれを使った攻撃を促すとのことで議論を呼ぶ。
Spike PHP Security Audit Tool
セキュリティ監査ツール。オープンソースにて提供。

PHP6.0 の開発情報

基調講演

PHP6では、

  • Unicodeネーティブ対応
  • register_globals, magic_*,safe_mode, ze1_* などの、レガシーコード削除
  • PECLから、APC、fileinfo 等のエクステンションの追加
  • MySQL ND(MySQL Native Driver)エクステンションの追加
  • 名前空間(namespace)、ガーベッジコレクタ(cycle collectior)などの機能追加・改良

などの実装が予定されています。

MySQL ND

MySQL NDとは、DB I/Fをネイティブに実装し、PHPからメモリやキャッシュを管理しようとするもの。使用メモリの低減により、更なる高速化が見込まれます。

ガーベッジコレクタ

ガーベッジコレクタとは、不要な変数を削除する機能であり、David Wang氏が「Google Summer of Code」で発表した『リファレンスカウンティング+サイクル検知』を採用しようという動きがあります。これを使用することで、eZ Componentsを使ったベンチマークでは、メモリの消費量は1/2~1/22に、実行時間は拡大という結果が見込まれており、更なる高速化が期待されます。この機能は、PHP5.3に入れるかどうかも議論中とのことです。

Unicode 対応

PHP6.0では、内部的にUTF-16に固定化される予定です。Unicode対応により、PHPに文字列リテラルという概念が生まれます。この実装がPHP言語の内部に大きな影響を与え、リリースが遅れている主な原因となっています。 Unicodeに対応することで、

  • 正規表現、エンコーディング変換
  • Unicode Collation、言語依存のソート検索手法標準化
  • ロケール(依存のソート)
  • Transliteration(音訳)

が可能になります。

たとえば、文字列の文字数を取得する場合、unicode_semantics=onとすることで、strlen関数で日本語も英語も文字数を正しく取得できるようになります。このように各関数がUnicode文字列にネーティブに対応します。

PHP6と日本語

PHP6では、mbstringの機能の多くがネーティブ実装されるため、mbstring の取り扱いをどうするか議論されています。

実際、日本語対応に対して mbstring と同等の機能を実用面において実装しているのか、依然として不安が残されています。

よって、mbstringについて、

  • (案1) Unicode完全移行:mbstringをPECLに移動
  • (案2) エンジンlibmbflをICUに変更してマルチバイト固有の処理を実装
  • (案3) 現状のまま

という3つの提案がなされています。

マルチバイト文字列をネイティブとする日本人にとってはPHP6は待ち遠しい実装となりますが、実用面において、mbstringと同等の機能が実装されるか依然として不安が残されたままなど、まだまだ課題も存在するようです。また、当初PHP6で実装される予定であった、MySQL NDや、ガーベッジコレクタの実装によるメモリ消費量の低減による高速化、名前空間の実装などが、PHP5.3でも実装するか議論中とのことでした。

PHP言語の機能実装については、開発グループの今後の動向が注目されます。