PHPの今とこれから 2013

6,150 views

Published on

PHPカンファレンス2013における講演のプレゼン資料:
PHP 5.5の新機能を含むリリース情報、PHP 5.6へ向けての展望など。

Published in: Technology
  • Be the first to comment

PHPの今とこれから 2013

  1. 1. PHPの今とこれから 2013 日本PHPユーザ会 廣川 類 PHPカンファレンス2013 「PHPの夢を語ろう。」 2013年9月14日(土)
  2. 2. PHPとは? PHPは主にWebアプリケーションに使用されるスクリプト言語 1995年の誕生以来、Webと共に成長 244M サイト (39%)のWebサーバーでPHPが実行されている TIOBE Programming Community Index : スクリプト言語で1位 http://news.netcraft.com/archives/2013/01/31/php-just-grows-grows.html
  3. 3. PHP アンケート 2013 主に使っているPHPのバージョン 1) PHP 4.x-5.1 2) PHP 5.2 3) PHP 5.3 4) PHP 5.4 5) PHP 5.5 6) 使ってない
  4. 4. PHPユーザ分布 引用: W3Techs.com, 2013/9/1版 80.9% 19.1% 2.8% usage of server-side programming language PHP ASP.NET Java ColdFusion Perl +3% since 2012/9 57.9% 9.6% 5.8% 3.4% Most popular CMS WordPress Joomla Drupal Blogger Magento
  5. 5. PHPバージョン分布 引用: W3Techs.com, 2013/9/1版 PHP 5.3: +15% since 2012/9 6.4% 51.9% 39.3% Subversions of PHP 5 5.5 5.4 5.3 5.2 5.1 5.0 36.5% 58.6% 4.1% 2012/9/8 5.5 5.4 5.3 5.2 5.1
  6. 6. PHPの歩み ・・・・mbregex ・・・・zend-multibyte 2003 2004 2005 2006 2007 2008 2009 4.3 ・・・・CLI ・・・・stream 4.4 `02/12 `05/6 ・バグ修正・バグ修正・バグ修正・バグ修正 `08/8 (EOL) 2010 5.3 `09/6 ・名前空間・名前空間・名前空間・名前空間 ・クロージャ・クロージャ・クロージャ・クロージャ ・遅延静的束縛・遅延静的束縛・遅延静的束縛・遅延静的束縛 ・・・・GC改善改善改善改善 ・・・・MySQLnd 5.6 PHPPHPPHPPHP 10101010周年周年周年周年 JPUGJPUGJPUGJPUG 10101010周年周年周年周年 フレームワークフレームワークフレームワークフレームワーク AJAXAJAXAJAXAJAX XMLXMLXMLXML W/SW/SW/SW/S APIAPIAPIAPI Web/DBWeb/DBWeb/DBWeb/DB セキュリティセキュリティセキュリティセキュリティ 2011 2012 PHPconPHPconPHPconPHPcon 関西関西関西関西 PHPconPHPconPHPconPHPcon 北海道北海道北海道北海道 5.4 ・・・・Traits - 速度改善速度改善速度改善速度改善 - MB対応標準化対応標準化対応標準化対応標準化 - 組込み組込み組込み組込みWebサーバサーバサーバサーバ - レガシー機能削除レガシー機能削除レガシー機能削除レガシー機能削除 `12/3 6.0 `10/3 キャンセルキャンセルキャンセルキャンセル ・・・・Unicode ・エンジン・エンジン・エンジン・エンジン/OOP大幅強化:大幅強化:大幅強化:大幅強化:ZE2 ・・・・XML対応強化対応強化対応強化対応強化(SimpleXML) ・・・・Webサービスサービスサービスサービス(SOAP) ・・・・DB強化強化強化強化 (SQLite, MySQLi) `10/12 (EOL) 5.0 `04/7 5.1 `05/11 5.2 `06/11 ・メモリ/速度改善・メモリ/速度改善・メモリ/速度改善・メモリ/速度改善 ・入力フィルタ・入力フィルタ・入力フィルタ・入力フィルタ・速度改善・速度改善・速度改善・速度改善 ・・・・PDO スマホスマホスマホスマホ 2013 5.5 ・ジェネレータ・ジェネレータ・ジェネレータ・ジェネレータ - キャッシュキャッシュキャッシュキャッシュ - パスワードハッシュパスワードハッシュパスワードハッシュパスワードハッシュ `13/6 `13/7 (EOL) 2014 Google App EngineGoogle App EngineGoogle App EngineGoogle App Engine (2013/5)(2013/5)(2013/5)(2013/5) クラウドクラウドクラウドクラウド
  7. 7. PHP リリースとPHP 5.3 EOL リリースサイクル:1年 ライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年) PHP 5.3 のEOLをPHP 5.5リリース時に宣言(2013/6) セキュリティ修正のみ実施(1年間) 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 https://wiki.php.net/rfc/php53eol
  8. 8. PHPリリース情報 *1 SOAP soap.wsdl_cache_dirにopen_basedirチェック追加 *2 SOAP 外部エンティティを含むWSDLにより任意ファイル読み込み *3 quoted_printable_encode()バッファオーバーフロー *4 XMLパーサ ヒープメモリ攻撃脆弱性 *5 SSL証明書subjectAltNameヌル文字攻撃脆弱性(偽CA, Ruby) *6 セッション固定化攻撃脆弱性 Release 5.3 5.4 5.5 変更 2013/2/21 2013/3/14 5.3.22 5.4.13 CVE-2013-1635 *1, CVE-2013-1643 *2 2013/6/5 5.3.26 5.4.16 CVE-2013-2110 *3 2013/6/20 5.5.0 PHP 5.5リリース 2013/7/11 5.3.27 CVE-2013-4113 *4, PHP 5.3 EOL 2013/8/15 2013/8/16 5.4.18 5.5.2 CVE-2013-4113 *4, CVE-2013-4248 *5 CVE-2011-4718 *6 2013/8/22 5.4.19 5.5.3 CVE-2013-4248修正時バッファ初期化バグ CVE: Common Vulnerabilities and Exposures
  9. 9. PHP 5.5 改善/変更のポイント 速度改善:5%~10% ジェネレータ:反復処理の所要メモリを低減 パスワードハッシュAPI オペコードキャッシュの標準搭載化: Zend OPcache いくつかの構文の改善 セッションアダプション回避(PHP 5.5.2)
  10. 10. PHP 5.5でより速く、快適に 更なる高速化 Athlon II X4 640 3.0GHz, Ubuntu 13.04 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6 実行時間[s] Zend/bench.php 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 0 5 10 15 20 25 30 PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6 実行時間[s] Zend/micro_bench.php $x = $f ? $f : tmp $x = $f ? $f : $a $x = $f ?: tmp $x = $a ?: null $x = $str[0] $x = $hash['v'] $x = $GLOBALS['v'] $x = $_GET $x = TEST new Foo() $x = Foo::TEST $this->f() empty($this->x) isset($this->x) $this->x-- $this->x++ --$this->x ++$this->x $this->x += 2 $this->x = 0 $x = $this->x Foo::f() self::f() empty(Foo::$x) isset(Foo::$x) Foo::$x = 0 $x = Foo::$x empty(self::$x) isset(self::$x) self::$x = 0 $x = self::$x int_func() undef_func() func() empty_loop
  11. 11. ジェネレータ構文 ジェネレータ:イテレータを関数で定義(Python) 例:ファイル各行処理: ファイル全体読込み→メモリが大量に必要 <?php function get_line($file) { $fp = fopen($file, 'r'); while (!($line = fgets($fp))) { yield $line; } fclose($fp); } $r0 = memory_get_peak_usage(); foreach (get_line('lipsum.txt') as $line); echo memory_get_peak_usage() - $r0, "¥n"; $r0 = memory_get_peak_usage(); foreach (file('lipsum.txt') as $line); echo memory_get_peak_usage() - $r0, "¥n”; (https://wiki.php.net/rfc/generators) 大量の反復処理を 行う場合に使用メモリ 低減が可能 122680 6872
  12. 12. OPcache オペコードキャッシュ標準化 https://wiki.php.net/rfc/optimizerplus Zend Optimizer+をOSS化, PHP 5.5組込を提案(2013/1) Zend OPcacheに改名、採用 (2013/3) オペコードキャッシュのみサポート、APCより高速(10%以上) 0 10 20 30 40 50 60 70 PHP 5.5 キャッシュなし OPcache APC WordPress 3.6, Ubuntu 13.04
  13. 13. finallyキーワード (https://wiki.php.net/rfc/finally) try { echo ”1"; throw new Exception("ex"); } catch (Exception $e) { echo ”2"; } finally { echo "#"; } finallyブロック:tryブロックから出る際に常に実行される (Java) 例外発生の有無によらない → クリンナップコードを記述 return等でクリンナップコードがバイパスされることを防止 12#
  14. 14. $hash = password_hash($password, PASSWORD_BCRYPT); パスワード用ハッシュ (https://wiki.php.net/rfc/password_hash)パスワードハッシュ用API if (password_verify($password, $hash)) { if (password_needs_rehash($password, $algo, $opts); $hash = password_hash($password, $algo, $opts); } } パスワードのリハッシュ(ハッシュ更新) PHP < 5.5用:https://github.com/ircmaxell/password_compat echo password_verify($password, $hash) ? "OK" : "NG"; crypt関数のラッパー:従来はsalt文字列を作るのが面倒だった 生成 検証
  15. 15. function randomHexString($length) { for ($i = 0, $s = ''; $i < $length; ++$i) { $s .= "0123456789abcdef"[mt_rand(0, 15)]; } return $s; } echo randomHexString(10); その他の機能(1) (https://wiki.php.net/rfc/constdereference) echo ”123”[1]; echo [1,2,3][2]; ランダムな16進文字列を生成する例 配列/文字列定数の添字参照 foreach ($users as $user) { list($id, $name) = $user; echo “$id => $name”; } foreach ($users as list($id, $name)) { echo “$id => $name”; } foreachでリスト代入が可能に (https://wiki.php.net/rfc/foreachlist) 1e1384a471 2 3
  16. 16. その他の機能(2) function foo() { return []; } var_dump(empty(foo())); empty()が任意の式をサポート(従来は変数のみ) Namespace Foo¥Bar; class A {} echo A::class; クラス名を ::class で取得可能に Foo¥Bar¥A bool(true) https://wiki.php.net/rfc/empty_isset_exprs
  17. 17. UTF-8 がより安全に PHP 5.4以降では、非最短形式のUTF-8を許容しない 不正文字がある場合の処理が標準仕様から外れていた Bug #65045 不正なUTF-8の例: [不正文字] U+24B62 U+24B62 mb_substitute_character(0xFFFD); $s = "¥xf0¥xa4¥xad”. "¥xf0¥xa4¥xad¥xa2"."¥xf0¥xa4¥xad¥xa2"; echo mb_convert_encoding($s,"UTF-32","UTF-8"); U+24B62 U+24B62PHP 5.3 U+FFFD U+24B62 U+24B62PHP 5.5.2 PHP 5.4.20 U+FFFD U+FFFD U+FFFD U+FFFD U+24B62 PHP 5.5.1 PHP 5.4.19
  18. 18. JSONライセンス事件 JSONライセンスがGPL非互換と判定される The Software shall be used for Good, not Evil. Linuxディストロ(Debian等)がJSON拡張を外す https://wiki.php.net/rfc/free-json-parser JSON関数を使う際の回避策: 1.ソースコードからビルド 2.pecl/json-c
  19. 19. PHP 5.6 リリース: 2014/6 (?) PHP 5.5と同様に小幅な改訂の見込み RFC(http://wiki.php.net/rfc)を参照 内部演算子オーバーロード実装とGMP改善 セッション処理改善(by 大垣さん) FR #17860 セッション変更の自動検出
  20. 20. 内部演算子オーバーロード/GMP改善 (https://wiki.php.net/rfc/operator_overloading_gmp) 内部演算子オーバーロードの仕組み $c = gmp_add($a, $b); $c = $a + $b; GMPのキャスト、ダンプ、シリアル化を可能にする $c = gmp_init(42); echo $c; // 42 var_dump((string)$c); // string(2) “42 var_dump($s = serialize($c)); // string(33) “0:3:”GMP”:1:{s:3:”num”;s:2:”42”;}”
  21. 21. PHP開発の今 PHPは歯ブラシのようなもの。いつも使う役に立つシンプルな ツールだけど、誰も歯ブラシのことなんて気にしないよね。 PHPは「問題を解くためのシンプルなツール」なのさ。 (http://en.wikiquote.org/wiki/Rasmus_Lerdorf) Rasmus語録 PHP開発にはロードマップがない? PHP Parser by Nikita Popov https://github.com/nikic/PHP-Parser PHPerには言語愛がないのか? ・PHPは既に熟成期にあり、新機能は既存の機能と干渉する可能性がある -> RFCは否定的な意見を受ける: Anthony氏開発離脱宣言 ・ロードマップを示すと提案の自由度を縛ってしまう
  22. 22. PHPの未来 php framework applications / plugins pecl users TIOBE index : ZF2がPHP人気上昇の理由と分析 → WordPressを始めとするアプリの広がりが理由では? Webの進化に柔軟に対応 高性能かつ現実的な解を提供する スケーラブル:ブログから最大級のSNSサイトまで
  23. 23. PHPユーザ相互の情報交換およびユーザ相互の情報交換およびユーザ相互の情報交換およびユーザ相互の情報交換および コミュニティの健全な発展コミュニティの健全な発展コミュニティの健全な発展コミュニティの健全な発展 設立趣旨設立趣旨設立趣旨設立趣旨 • 高性能高性能高性能高性能Webミドルウエアへのニーズ増大ミドルウエアへのニーズ増大ミドルウエアへのニーズ増大ミドルウエアへのニーズ増大 • オープンソースソフトウエアの発展オープンソースソフトウエアの発展オープンソースソフトウエアの発展オープンソースソフトウエアの発展 背景背景背景背景 国内国内国内国内PHPPHPPHPPHPユーザの増加ユーザの増加ユーザの増加ユーザの増加 活動内容活動内容活動内容活動内容 ドキュメント整備ドキュメント整備ドキュメント整備ドキュメント整備 セミナー/イベントセミナー/イベントセミナー/イベントセミナー/イベント メンバー/スタッフメンバー/スタッフメンバー/スタッフメンバー/スタッフ 国際化国際化国際化国際化 http://www.php.gr.jp/ Web ・・・・PHPユーザ会員と思ったらメンバーユーザ会員と思ったらメンバーユーザ会員と思ったらメンバーユーザ会員と思ったらメンバー ・運営するのも楽しいかも・運営するのも楽しいかも・運営するのも楽しいかも・運営するのも楽しいかも 日本PHPユーザ会 (2000年年年年4月発足月発足月発足月発足) phpphpphpphp----users,users,users,users, phpphpphpphp----devdevdevdev,,,, phpphpphpphp----doc,doc,doc,doc, phpugphpugphpugphpug----adminadminadminadmin メーリングリストメーリングリストメーリングリストメーリングリスト

×