PHP の今とこれから  2011 日本 PHP ユーザ会  廣川 類 PHP カンファレンス 2011 2011 年 9 月 10 日 ( 土 )
4.0 4.1 ・エンジン大幅強化/ OOP : ZE1 ・ PEAR 2000 2001 *  日本 PHP   ユーザ会設立 *  PHP カンファレンス ・ mbstring 統合 ・性能改善 -  入力セキュリティ改善 4.2 ・自動グ...
PHP 5.3 への移行 <ul><li>大幅な機能強化( PHP 6.0 開発遅延の影響) メモリ効率/速度改善、名前空間、遅延静的束縛、クロージャ、 ... </li></ul><ul><li>PHP 5.2  のサポート終了 : PHP ...
PHP  標準リリースプロセス <ul><li>リリースサイクル:1年 </li></ul><ul><li>ライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年) </li></ul><ul><li>同一メジャーリリース(例: 5....
PHP 5.4  改善 / 変更のポイント <ul><li>スケジュール: 2011/8/4 α3 、 2011/9/B β 、  2011/9/E RC1 </li></ul><ul><li>速度改善: 10% 〜  15% </li></u...
Zend/bench.php Zend/microbench.php 43% 高速化 19% 高速化 PHP 5. 4でより速く、快適に <ul><li>更なる高速化、省メモリ化 </li></ul>
PHP 5.4  でコード再利用 :Traits <ul><li>Trait:  単一継承の言語でコードを再利用する仕組み </li></ul><ul><li>「言語がサポートするコピー/ペースト」(多重継承よりシンプル) </li></ul>...
PHP 5.4  で構文が便利に <ul><li>オープンタグの短縮形(テンプレート記述がわかりやすくなる) </li></ul>こんにちは、 <? php echo $name; ?> さん こんにちは、 <?= $ name ?> さん s...
PHP 5.4  でもう少し便利に <ul><li>2 進数表現 </li></ul>echo  0b00100 ;  //  出力:  4 function foo ( callable  $do) {} foo(“strcmp”); foo...
PHP 5.4  で日本語の扱いが便利に <ul><li>Zend エンジンマルチバイト対応標準化:バイナリ互換性改善 </li></ul><ul><ul><li>従来 :PHP 構築時に – enable-zend-multibyte –en...
PHP 5.4  で UTF-8  がより安全に <ul><li>RFC3629 準拠の UTF-8 にチェック強化(最大4バイト): PHP 5.3 まで: 最大 6 バイト、非最短形式を許容/出力しない </li></ul><ul><li>...
従来の携帯絵文字変換 DoCoMo SJIS-win UTF-8 (Unicode) PUA DB KDDI SoftBank DoCoMo SoftBank KDDI KDDI ( 非公式 ) UTF-8 PUA : Private Use ...
PHP 5.4  の絵文字変換 DoCoMo SJIS-DoCoMo UTF-8-DoCoMo UTF-8 (Unicode 6.0)  DB KDDI SoftBank BMP UTF-8 (1 〜  4 バイト )  utf8mb4 (My...
<ul><li>キャリア内文字コード変換:  DoCoMo SJIS -> DoCoMo UTF-8 </li></ul><ul><li>キャリア間文字コード変換:  DoCoMo SJIS -> SoftBank SJIS </li></ul...
PHP とセキュリティ 1.アプリケーション固有の脆弱性 ( XSS 等 ) 2.設定に起因する脆弱性( OS 、 Web サーバ、 DB 、 PHP ) 3.システム固有の脆弱性( OS 、 Web サーバ、ブラウザ、 DB 、 PHP ) ...
PHP と QA -  PHPのコード品質は比較的高い 欠陥 / MLOC  Coverity ( 米国 国土安全保障省’ 07 ) -  テストされていないコードには欠陥がある カバレッジ率改善: 約 60% ( PHP 5.2 )     ...
PHP ユーザ相互の情報交換およびコミュニティの健全な発展 設立趣旨 <ul><li>  高性能 Web ミドルウエアへのニーズ増大 </li></ul><ul><li> オープンソースソフトウエアの発展 </li></ul>背景 国内 PHP...
PHP の成功と未来 Scales  :小規模サイトから Facebook/Yahoo! まで    C10k 問題 (node.js), MySQL 5.6(NoSQL   I/F), gearman Easy to learn : 言語がシ...
Upcoming SlideShare
Loading in...5
×

PHP, Now and Then 2011

1,413

Published on

Presentation material for the PHP Conference 2011 at Tokyo, JAPAN (written in Japanese.)

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,413
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "PHP, Now and Then 2011"

  1. 1. PHP の今とこれから 2011 日本 PHP ユーザ会 廣川 類 PHP カンファレンス 2011 2011 年 9 月 10 日 ( 土 )
  2. 2. 4.0 4.1 ・エンジン大幅強化/ OOP : ZE1 ・ PEAR 2000 2001 * 日本 PHP ユーザ会設立 * PHP カンファレンス ・ mbstring 統合 ・性能改善 - 入力セキュリティ改善 4.2 ・自動グローバル変数のデフォルト無効化 ・ mbregex ・ zend-multibyte 2002 2003 2004 2005 2006 2007 2008 2009 4.3 ・ CLI ・ stream 4.4 `02/12 `02/4 `01/12 `00/5 `05/6 ・バグ修正 `08/8 5.0 `04/7 ・エンジン /OOP 大幅強化: ZE2 ・ XML 対応強化 (SimpleXML) ・ Web サービス (SOAP) ・ DB 強化 (SQLite, MySQLi) 5.1 `05/11 ・実行速度改善 ・ PDO 5.2 ・メモリ管理/速度改善 ・入力フィルタ `06/11 5.3 `09/6 2010 ・名前空間 ・クロージャ ・遅延静的束縛 ・ GC 改善 ・ MySQLnd 5.5 * PHP10 周年 * 開発体制強化 * PHP ユーザ会 10 周年 * ガラケー->スマフォ * HTML 5 * フレームワーク * AJAX/RIA * XML *Web サービス * Web/DB * セキュリティ * PHP5 移行促進 * PHP QA 強化 * 新機能投票制に PHP の歩み 5.4 ・ Traits - 速度改善 - マルチバイト強化 - レガシー機能削除 2011 2012 * PHP カンファレンス関西 ( ・ weakref)
  3. 3. PHP 5.3 への移行 <ul><li>大幅な機能強化( PHP 6.0 開発遅延の影響) メモリ効率/速度改善、名前空間、遅延静的束縛、クロージャ、 ... </li></ul><ul><li>PHP 5.2 のサポート終了 : PHP 5.2.17 (2011/1) </li></ul><ul><li>フレームワークのサポート: Sympony 2.0 (2011/7) </li></ul>AMD64, 2GHz Windows Vista SP1 Zend/bench.php
  4. 4. PHP 標準リリースプロセス <ul><li>リリースサイクル:1年 </li></ul><ul><li>ライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年) </li></ul><ul><li>同一メジャーリリース(例: 5.x )では下位互換性を確保 </li></ul><ul><li>同一マイナーリリース(例: 5.3.x )ではバイナリ互換性を確保 </li></ul>https://wiki.php.net/rfc/releaseprocess **** pre release phase ++++ release lifetime with all bug fixes, no feature addition ---- release lifetime security fixes only D EOL Version Time -> 2011 2012 2013 2014 2015 2016 2017 | | | | | | | | | | | | | 5.3 +++++++++++++-----D 5.4 |*****+++++++++++++++++++++++++-----------D 5.5 | | |******++++++++++++++++++++++++-----------D 5.6 | | | | |******++++++++++++++++++++++++-----------D 6.0 | | | | |******++++++++++++++++++++++++-----------D
  5. 5. PHP 5.4 改善 / 変更のポイント <ul><li>スケジュール: 2011/8/4 α3 、 2011/9/B β 、 2011/9/E RC1 </li></ul><ul><li>速度改善: 10% 〜  15% </li></ul><ul><li>Traits :コードの再利用性改善 </li></ul><ul><li>レガシー機能の削除 : register_globals, zend.ze1_compatibility_mode, magic_quotes*, safe_mode* , ext/sqlite </li></ul><ul><li>マルチバイト対応強化( mbstring 機能強化) </li></ul><ul><li>(テスト用)組込み Web サーバー : php -S localhost:8080 </li></ul><ul><li>default_charset : ISO-8859-1 から UTF-8 に </li></ul><ul><li>エラー設定:  E_STRICT が E_ALL に含まれるようになった </li></ul>
  6. 6. Zend/bench.php Zend/microbench.php 43% 高速化 19% 高速化 PHP 5. 4でより速く、快適に <ul><li>更なる高速化、省メモリ化 </li></ul>
  7. 7. PHP 5.4 でコード再利用 :Traits <ul><li>Trait:  単一継承の言語でコードを再利用する仕組み </li></ul><ul><li>「言語がサポートするコピー/ペースト」(多重継承よりシンプル) </li></ul><ul><li>クラスや他の traits とメソッド名の衝突を解決する仕組み </li></ul><? php trait A { public function show() { echo 'Hello,',$this->getName(),'!'; } abstract public function getName(); } class Base { /* 1 */ } class Foo extends Base { use A; public function getName() { echo 'PHP'; } } $obj = new Foo(); echo $obj->show(); // Hello,PHP! <? php trait A { public function show() { echo 'Hello,';} } trait B { public function show() {echo 'PHP!';} } class Foo { use A, B { A::show insteadof B; B::show as showN; } } $obj = new Foo(); echo $obj->show() . $obj->showN(); リネームでは なくエイリアス
  8. 8. PHP 5.4 で構文が便利に <ul><li>オープンタグの短縮形(テンプレート記述がわかりやすくなる) </li></ul>こんにちは、 <? php echo $name; ?> さん こんにちは、 <?= $ name ?> さん short_open_tag を有効にすると <? ?> タグが有効となり、 XML と干渉する。 -> short_open_tag の設定によらず有効に $ a = array(1,2,3); $b = array('name' => 'taro', 'age' => 23); $ a = [1,2,3] ; $b = ['name' => 'taro', 'age' => 23] ; <ul><li>配列デリファレンシング (配列を返す関数/メソッドの処理簡略化) </li></ul>function foo () { return array('taro',23);} $v = foo(); echo $v[0]; // taro echo foo()[0]; echo $foo->bar()[0]; <ul><li>配列定義の簡略表記(配列の定義が簡単に) </li></ul>
  9. 9. PHP 5.4 でもう少し便利に <ul><li>2 進数表現 </li></ul>echo 0b00100 ; // 出力: 4 function foo ( callable $do) {} foo(“strcmp”); foo(function() {}); foo(1); // catchable fatal error <ul><li>コール可能な引数に対するタイプヒント </li></ul>
  10. 10. PHP 5.4 で日本語の扱いが便利に <ul><li>Zend エンジンマルチバイト対応標準化:バイナリ互換性改善 </li></ul><ul><ul><li>従来 :PHP 構築時に – enable-zend-multibyte –enable-mbstring </li></ul></ul><ul><ul><li>PHP 5.4 : zend.multibyte = On で有効に </li></ul></ul><ul><ul><li>mbstring.script_encoding -> zend.script_encoding </li></ul></ul><ul><li>mb_encode_numericentity, mb_decode_numericentity: 16 進数値文字参照(例: 覫 )追加 </li></ul><ul><li>RFC3629 準拠の UTF-8 にチェック強化(最大4バイト) </li></ul><ul><li>mbstring ( libmbfl )に文字コード追加: </li></ul><ul><ul><li>携帯用 : SJIS-Mobile 、 UTF-8-Mobile 、 ISO-2022-JP-Mobile </li></ul></ul><ul><ul><li>JIS X0213 : SJIS-2004 、 EUC-JP-2004 、 ISO-2022-JP-2004 </li></ul></ul><ul><ul><li>SJIS-Mac (MacJapanese) 、 GB18030 、 CP950 、 CP936 </li></ul></ul>
  11. 11. PHP 5.4 で UTF-8 がより安全に <ul><li>RFC3629 準拠の UTF-8 にチェック強化(最大4バイト): PHP 5.3 まで: 最大 6 バイト、非最短形式を許容/出力しない </li></ul><ul><li>非最短形式の UTF-8 の例: ‘ <’ (0x3C) = 0xC0 BC, 0xE0 80 BC, 0xF0 80 80 BC </li></ul><ul><li>不正な UTF-8 の例 </li></ul>mb_substitute_character(0xFFFD); $s = &quot;x41 xe0x9f x80 x41&quot;; echo mb_convert_encoding($s,&quot;UTF-16&quot;,&quot;UTF-8&quot;); U+0041 U+07C0 U+0041 PHP 5.2 まで U+0041 U+FFFD U+FFFD U+0041 PHP 5.4 U+0041 U+0041 PHP 5.3 A0A AA A[?][?]A
  12. 12. 従来の携帯絵文字変換 DoCoMo SJIS-win UTF-8 (Unicode) PUA DB KDDI SoftBank DoCoMo SoftBank KDDI KDDI ( 非公式 ) UTF-8 PUA : Private Use Area (U+E000 … U+F8FF) <ul><li>各キャリアは SJIS 、 UTF-8 外字領域に絵文字を定義 </li></ul><ul><li>キャリア内変換( SJIS↔ UTF-8 )、キャリア間変換を定義 </li></ul><ul><li>独自の変換をライブラリで定義: HTML_Emoji,Text_Pictogram_Mobile など </li></ul>KDDI DoCoMo SoftBank キャリア内変換 キャリア間変換 スクリプトによる変換 mbstring による変換
  13. 13. PHP 5.4 の絵文字変換 DoCoMo SJIS-DoCoMo UTF-8-DoCoMo UTF-8 (Unicode 6.0) DB KDDI SoftBank BMP UTF-8 (1 〜 4 バイト ) utf8mb4 (MySQL) BMP : U+2000 .. U+3299 SMP : U+1F300 .. U+1F7FF Pictgraphic sets PUP : U+FE000 .. U+ FEFFF Google キャリア内変換 キャリア間変換 mbstring による変換 SJIS-KDDI SJIS-SoftBank UTF-8-KDDI UTF-8-SoftBank SMP PUP-A ・ Unicode に収録されない文字は emoji4unicode のマッピングにより PUP に収録 ・キャリア間変換未定義の文字は代替文字となる (ライブラリによるフォールバック処理を想定) ■ Unicode 6.0 へ絵文字収録: 携帯以外でもサポート ■ Unicode 6.0 を介したキャリア内/キャリア間相互変換を定義 ■ 各キャリア用 SJIS,UTF-8,ISO-2022-JP(KDDI のみ ) を定義 ☀
  14. 14. <ul><li>キャリア内文字コード変換:  DoCoMo SJIS -> DoCoMo UTF-8 </li></ul><ul><li>キャリア間文字コード変換: DoCoMo SJIS -> SoftBank SJIS </li></ul><ul><li>キャリア文字コード ↔ UTF-8 ( Unicode 6.0 ): DB 保存用 </li></ul>PHP 5.4 :携帯電話の絵文字の例 echo mb_convert_encoding(&quot;xF8x9F&quot;, &quot;SJIS-Mobile#SoftBank&quot;, &quot;SJIS-Mobile#DOCOMO&quot;); echo mb_convert_encoding(&quot;xF8x9F&quot;, &quot;UTF-8-Mobile#DOCOMO&quot;, &quot;SJIS-Mobile#DOCOMO&quot;); utf8 = mb_convert_encoding(&quot;xF8x9F&quot;, &quot;UTF-8&quot;, &quot;SJIS-Mobile#DOCOMO&quot;); 出力: UTF8-EE98BE (U+E63E) 出力: SJIS-F98B 出力: UTF8-E29880 (U+2600)
  15. 15. PHP とセキュリティ 1.アプリケーション固有の脆弱性 ( XSS 等 ) 2.設定に起因する脆弱性( OS 、 Web サーバ、 DB 、 PHP ) 3.システム固有の脆弱性( OS 、 Web サーバ、ブラウザ、 DB 、 PHP ) ・ 攻撃手段は日々進化する ・ 初心者だからといって許してくれない ・ 基本を守る ・ 最新の情報を見る(雑誌、ブログ等)
  16. 16. PHP と QA - PHPのコード品質は比較的高い 欠陥 / MLOC Coverity ( 米国 国土安全保障省’ 07 ) - テストされていないコードには欠陥がある カバレッジ率改善: 約 60% ( PHP 5.2 )              -> 約 70% (PHP 5.3) LOC -   PHP 5.3.7 (8/18 公開 ) で crypt 関数( MD5) が  動作しなかった ・ RC5 で静的解析ツールの警告を修正した際にエンバグ ・テストケースの失敗を ノイズとして見過ごす ・修正版( PHP 5.3.8 )を緊急公開 (8/23) ・軽微な未修正の問題についてもテストケースがコミットされ FAIL する原因となっている。 ->  提案「 XFAIL (experimental fail) を導入し、 FAIL の出現の判別を容易にする 」 strncat != strlcat
  17. 17. PHP ユーザ相互の情報交換およびコミュニティの健全な発展 設立趣旨 <ul><li>  高性能 Web ミドルウエアへのニーズ増大 </li></ul><ul><li> オープンソースソフトウエアの発展 </li></ul>背景 国内 PHP ユーザの増加 活動内容 ドキュメント整備 セミナー/イベント メンバー/スタッフ 国際化 http://www.php.gr.jp/ Web ・ PHP ユーザ会員と思ったらメンバー ・運営するのも楽しいかも 日本 PHP ユーザ会 (2000 年 4 月発足 ) php-users, php-dev, php-doc, phpug-admin メーリングリスト
  18. 18. PHP の成功と未来 Scales :小規模サイトから Facebook/Yahoo! まで   C10k 問題 (node.js), MySQL 5.6(NoSQL   I/F), gearman Easy to learn : 言語がシンプル、ドキュメントが豊富 - 多様な要求に応えつつわかり易さを保つことが必要 - 地道な活動が重要: ローカルな PHP カンファレンス、勉強会、等 Easy to manage : 必要十分な現実的な解を提供 ( Web の進化に対応)   - キラーアプリ (WordPress など ) の存在がキー - モバイル対応( PC -> スマートフォン)がますます重要に - Web API (OAuth 2), HTML 5 などの新標準への対応

×