「PHPの今とこれから 2007」
日本PHPユーザ会 廣川 類
PHPカンファレンス2007
2007年9月1日(土)‫‏‬
PHPの歩み
Netcraft社 (www.netcraft.com)による統計データ
Nexen Services (www.nexen.net)‫‏‬
PHP 34%, ASP 21%, その他 0%, 不明 43%
PHPの開発体制
Rasmus Lerdorf Andi Gutmans
Zeev Suraski
Andrei Zmievski
CVSアカウント:約1500名(15名
)‫‏‬
コア:134名(5
名)PHP Group:
10名
PHP 4.3.11
・OOP機能大幅強化
・SQLite
・Webサービス
PHP 4.3.0
PHP 5.0.0 PHP 5.0.4
PHP 6.0.0
・高速化
・ PDO
・Unicode/i18n
・キャッシュ(APC)‫‏‬
・レガシー機能廃止
・名前空間
バグ
修正
リリース済み
開発中
PHP 4.4.0
バグ修正
(バイナリ非互換)‫‏‬
バグ
修正
PHP 5.1.0
PHP 4.4.7
バグ
修正
PHP 5.1.5
バグ
修正
・filter/json/zip
・メモリ管理改良
PHP 5.2.0 PHP 5.2.3
PHPバージョン
PHP アンケート 2007
 PHP5に移行しない理由
1) PHP 4で十分 (PHP 5移行のメリットがない)
2) PHP 5で既存のアプリが動くか心配(互換性)
3) PHP 5に関する資料(書籍等)が少ない
4) PHP 5の安定性・バグに不安
5) その他
 主に使っているPHPのバージョン
1) PHP4
2) PHP5
3) PHP3
4) PHP6
5) 使ってない
PHP 5への移行
 PHP4のサポートは今年限り
 2008/1/1以降、新規リリースはなし
 2008/8/8まで致命的なセキュリティ修正を実施
 PHP 4.3/4.4で75% (Nexen.net)‫‏‬
 GO PHP 5
 アプリ開発者、ホスティング
 2008/2/5 以降PHP5.2以上をサポート
 PEAR: PEAR2でPHP 5以降のみサポート
http://www.gophp5.org/
PHP4→PHP5移行のポイント
 クラスに関係する部分は変更用
 ディープコピーを仮定したプログラム
 オブジェクトの比較
 E_STRICTによる構文互換性チェック
 Zend Engine 1互換モード
zend.ze1_compatibility_mode = Off
(E_STRICTを使用して非互換な部分を検出)
 一部の関数の処理が非互換‫‏‬
PHP4→PHP5移行関連情報
 商用PHP5移行サービス開始(例:Asial)
http://www.asial.co.jp/php5migration/
 移行に関する情報(例:gihyo.jp)‫‏‬
 PHP5スキル認定(例:Zend PHP 5 Certification)
 下位互換性がない変更点
PHPマニュアル
http://docs.php.net/manual/ja/migration5.php
http://www.zend.co.jp/certification/
PHP 5.2
 2006/11リリース
 更なる高速化
 stat(), implode(), str_replace(),シャットダウン
 メモリ管理効率化
 filter, zip, json エクステンション
 機能追加・改良
 PDO, SPL, xmlReader改良
 Apache 2.2 対応(Win32)‫‏‬
PHP 5.1/PHP 5.2の高速化
0
10
20
30
40
50
60
PHP 4.4 PHP 5.0 PHP 5.1 PHP 5.2 PHP 6.0
実行時間[s]
strcat(200000)
sieve(30)
nestedloop(12)
matrix(20)
heapsort(20000)
hash2(500)
hash1(50000)
fibo(30)
ary3(2000)
ary2(50000)
ary(50000)
ackermann(7)
mandel2
mandel
simpleudcall
simpleucall
simplecall
simple
• PHP 5.1/5.2 ZendEngine大幅に高速化
• PHP 5.2 メモリ使用効率化
php-5.x.x/Zend/bench.php
PHPとセキュリティ
http://www.hardened-php.net/
http://www.php-security.org/
Spike PHP Security Audit Tool
・Stefan Esser氏が主宰
・PHPのセキュリティ強化パッチ:Suhosin
ログ機能、入力チェック、バイナリ互換(Hardened-Patchでは×)
・the Month of PHP Bugs (MOPB)‫‏‬
PHPコア脆弱性、POCコード公開(独の法律で禁止?)
PEAR/PECL update
 PEAR:450, PECL: 174, アカウント1640
 PEAR Group誕生:Gregory Beaver他
 パッケージャ/インストーラ
● package.xml 1.0, PEAR 1.3サポート打切
 PEAR 2.0.0
● 2008/1リリース
● PHP Archiver (phar)サポート
● 新インストーラ:Pyrus
● PHP 5.2以降をサポート
フレームワークの深化/進化
 2005年 「フルスタックフレームワーク」Railsブレイク:
「Javaの既存フレームワークと比べ品質低下なしに10倍生産性
 新世代PHPフレームワーク多数誕生
 Ethna, Maple, CakePHP, ...etc.
 PHP5専用フレームワーク: Sympony, ZF
 Ajax対応
 PHP5用主要フレームワークがバージョン1.0に
 Sympony, ZF
PHP 6.0
 Unicodeネーティブ対応
 レガシーコード削除
 register_globals, magic_*, safe_mode
 ZE1互換モード
 エクステンション
 PECLから追加:APC, fileinfo他
 PECLへ移動:mime_magic他
 MySQLND (MySQL Native Driver)‫‏‬
 機能追加・改良
 名前空間
PHP 6.0のUnicode対応
 PHPに文字列リテラルという概念が生まれる
● Unicodeネーティブ対応:ICU 3.4をエンジンとして使用
● 多くの機能が影響を受ける
● Unicode Preview Release Q4,2007年リリース?
 Unicode対応と国際化
● 正規表現,エンコーディング変換
● Unicode Collation:言語依存のソート/検索手法標準化
● ロケール
● Transliteration(音訳)
Web アプリケーションと文字
Web Browser
PHP
Shift_JIS/EUC-JP
JIS/UTF-8 (未知)‫‏‬
Shift_JIS+ベンダー固有文字
Webサーバ
(Apache)‫‏‬
PHPスクリプト
RDBMS
Shift_JIS/EUC-JP
JIS/UTF-8
Shift_JIS/
EUC-JP/UTF-8
Shift_JIS/
EUC-JP/UTF-8
e-mail
ISO-2022-JP
外部→内部
内部→外部
ユーザ入力
SQLクエリ
送信
読込み
Mobile Phone
Unicode対応の流れ
PHP4/PHP
5 バイナリ文字列しかない
 マルチバイト文字はバイナリ列として認識
 mbstringのような専用の関数を使用する必要がある
PHP
6 unicode_semantics=on (デフォルト:off) で切替
 Unicode文字列 or バイナリ文字列
 各関数がUnicode文字列にネーティブ対応
 Unicodeとローカルエンコーディング間の相互変換を
ネーティブサポート
mbstring と文字エンコーディング変換
Web Browser
PHPスクリプト
http_input
http_output
script_encoding
internal_encoding
ファイルシステム
(Shift_JIS)‫‏‬
バイナリ文字列
メール
mb_send_mail()‫‏‬
mbstring. を省略
データ
mb_convert_encoding()‫‏‬
PHP6 と文字エンコーディング変換
Web Browser
PHPスクリプト
http_input_encoding
output_encoding
script_encoding runtime_encoding
ファイルシステム
filesystem_encoding
Unicode文字列
バイナリ文字列
fallback_encoding
ストリーム
stream_encoding()‫‏‬
unicode. を省略
UTF-16
課題:PHP6と日本語
 PHP6ではmbstringの機能の多くがネーティブ実装化
 日本語対応は十分か?(mbstringと同等か?)
 (入力)文字コード検出は?
 ICU 3.6に実装(現在はICU 3.4)
 mbstringは不要になるか?
 案1)Unicode完全移行:mbstringをPECLに移動
 案2)エンジンlibmbflをICUに変更してマルチバイト固有の処理を実
 案3)現状のまま
PHP6のデモ
PHP Framework Update
月宮・安藤・久保・他
PHPカンファレンス2007の見どころ
PHPの今とこれから 2007 廣川
10:00
11:00
12:30
昼休憩
13:30
パネル
今日からはじめるPHPエクステンション 関山
15:00
16:00
クロージング/懇親会
マイクロソフトの次世代Webテクノロジー 徹底解説 - Windows Server 2008 / IIS7.0 / FastCG
大規模サイトの構築・運用ノウハウ
藤本・尾藤
PHP入門(仮題) 柏岡
PHP at Yahoo! Japan 荻原
ライトニングトーク
17:00
Zend Core による PHP 環境の改善 for Windows and PowerGres 岡
PHPカンファレンス2006の見どころ
PHPの今とこれから 廣川
パネル:フレームワークについて熱く語ろう!(仮)
石川,高橋,月宮,藤本
10:00
11:00
12:00 昼休憩
13:00 AJAX with PHP 小山
危険なコード 大垣
13:50
PEARに登録するまで 鈴木
14:40
テクニカルトラック
Making of the ta-ko-san patch 枡形
Getting Rich with PHP4(and Ethna) 鶴岡
デザイナ/ビギナーズトラック
非エンジニアに送るPHPとの付き合い方 柏岡
デザイナーとプログラマに送るSmarty 田中
15:30
PHP6 & The PHP Collaboration Project Zeev Suraski
17:00 クロージング/懇親会
Web製作フローにおけるPHPとデザイン
の役割
佐藤,成田
まとめ
今年も熱い「PHPカンファレンス」
を
お楽しみください!
PHP5は使われているか?
nexen.netによる統計
PHP4:90% (PHP 4.3 : 44%, PHP 4.4: 37%)‫‏‬
PHP5: 9% (PHP 5.1 : 5%, PHP 5.0: 4%)‫‏‬
Andi Gusmans氏の
BlogZend社のサポートチケットの74%はPHP5
インストールベースではPHP4の方が多いが,新規開発ベー
ス
ではPHP5の方が多い
・キラーアプリ不在
・PHP4の完成度が高く,バグ修正等のサポートが継続されてい
る
PHP5が普及しない理
由
バージョン毎のライン数
・ユーザニーズの多様化:コードの肥大化
・グルー言語のため,外部ライブラリ等の影響も受ける
・セキュリティリスク増大
・QAプロセスの標準
化
・PECL/PEARの分離
・テストケース強化
0
200000
400000
600000
800000
PHP1
PHP2
PHP3
PHP4
PHP5
PHP6
33,657個のバグ(平均5日で修正)‫‏‬
PHPとQA
PHP入門
 PHPはWebサーバサイドのスクリプト言語
 HTML埋め込み型
<html>
<?php echo "Hello World" ?>
</html>
<html>
Hello World
</html>
フレームワークの利点
 大規模アプリケーション開発の効率化
 Model-View-Controllerを分離:工程分離/効率化
(HTML埋め込み型のPHPと発想が逆)
 相互依存性排除:再利用性拡大
クライアント
コントローラ
アクション(モデル)
ビュー
①リクエスト
②実行 ③出力
④レスポンス
PHPユーザ相互の情報交換およびコミュニティの健全な発展
設立趣旨
• 高性能Webミドルウエアへのニーズ増大
• オープンソースソフトウエアの発展
背景
国内PHPユーザの増加
活動内容
ドキュメント整備
セミナー・イベント
メンバー
国際化
http://www.php.gr.jp/
Web
メーリングリスト
PHPユーザ会員と思ったらメンバー
日本PHPユーザ会
(2000年4月発足)‫‏‬
http://events.php.gr.jp/
PHPに関する情報源
 メーリングリスト http://ns1.php.gr.jp/ml.html
 php.net
 マニュアル 24ヶ国語に翻訳
・攻撃技術も日々進歩:初心者だからといって許してくれない
・入力はすべて汚染されている(性悪説)
・守る側は不利(一つのミスで大きな影響:人間はミスをする)
・基礎をしっかりと!(入力のチェック等)
・最新のセキュリティ関連情報を入手/対
応
・ミスの影響を最小限にする努力
・ログをきちんと見よう
PHPとセキュリティ
PHPとフレームワーク
 フレームワークは多数,しかし,標準不在
 RailsはPHPにも影響: CakePHP,Ethna,Symfony,...
 Zend Framework登場:2006/3 Preview版
 PHP5のみに対応:PHP5普及の切り札
 Zendブランドにより標準化を意図
 コミュニティ活動が活発,ドキュメント整備進む
 究極のシンプルさ,外部コンポーネントに非依存
proposals incubator
library
tests
manual
コンポーネント提案プロセス
フレームワーク比較
Sympony Ethn
a
ZF
バージョン PHP5PHP4/5PHP5
O/Rマッパー
ビュー
(テンプレート)‫‏‬ PHP/Smarty
Smart
y
PHP
入力チェック
自動生成 ジェネレータ有
Zend_Filter
(ZFormテスト中)‫‏‬
Zend_DB_Table
(AR, DO準備中)‫‏‬
AJA
X
Json
(ZAjax提案中
)‫‏‬
ジェネレータ有
ActiveRecor
d
ActiveRecor
d
検証/フィルタ
(設定ファイル)‫‏‬
検証・フィルタ
(ActionForm)‫‏‬
prototype.j
s
ZFApp
(preview1
)‫‏‬
CakePHP
PHP4/5
PHP
(雛形あり)‫‏‬
ActiveRecor
d
Maple
PHP4/5
AjaxHelpe
r
Smarty/Flex
y
検証/フィルタ検証
ジェネレータ有
ActiveGatewa
y
Zend Frameworkの構成
PHP4→PHP5移行のポイント
 クラスに関係する部分は変更用
 ディープコピーを仮定したプログラム
 オブジェクトの比較
 E_STRICTによる構文互換性チェック
 Zend Engine 1互換モード
zend.ze1_compatibility_mode = Off
(E_STRICTを使用して非互換な部分を検出)‫‏‬
 下位互換性がない変更点
PHPマニュアル
http://docs.php.net/manual/ja/migration5.php

PHPの今とこれから2007