phpの今とこれから 2013

23
PHPの今とこれから 2013 日本PHPユーザ会 廣川 類 PHPカンファレンス2013 PHPの夢を語ろう。」 2013914()

Upload: rui-hirokawa

Post on 31-May-2015

4.935 views

Category:

Technology


7 download

DESCRIPTION

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

TRANSCRIPT

PHPの今とこれから 2013

日本PHPユーザ会 廣川 類

PHPカンファレンス2013 「PHPの夢を語ろう。」

2013年9月14日(土)

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

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) 使ってない

PHPユーザ分布

引用:W3Techs.com, 2013/9/1版

80.9%

19.1%

2.8%

usage of server-side programming language

PHPASP.NETJavaColdFusionPerl

+3% since 2012/9

57.9%

9.6%

5.8%3.4%

Most popular CMS

WordPressJoomlaDrupalBloggerMagento

PHPバージョン分布

引用:W3Techs.com, 2013/9/1版

PHP 5.3: +15% since 2012/9

6.4%

51.9%

39.3%

Subversions of PHP 5

5.55.45.35.25.15.0

36.5%

58.6%

4.1%

2012/9/8

5.55.45.35.25.1

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

PHPPHPPHPPHP10101010周年周年周年周年

JPUGJPUGJPUGJPUG10101010周年周年周年周年

フレームワークフレームワークフレームワークフレームワークAJAXAJAXAJAXAJAX

XMLXMLXMLXMLW/S W/S W/S W/S APIAPIAPIAPI

Web/DBWeb/DBWeb/DBWeb/DBセキュリティセキュリティセキュリティセキュリティ

2011 2012PHPconPHPconPHPconPHPcon関西関西関西関西

PHPconPHPconPHPconPHPcon北海道北海道北海道北海道

5.4・・・・Traits- 速度改善速度改善速度改善速度改善- MB対応標準化対応標準化対応標準化対応標準化- 組込み組込み組込み組込みWebサーバサーバサーバサーバ- レガシー機能削除レガシー機能削除レガシー機能削除レガシー機能削除

`12/36.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)

クラウドクラウドクラウドクラウド

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 onlyD EOLVersion Time ->

2011 2012 2013 2014 2015 2016 2017| | | | | | | | | | | | |

5.3 +++++++++++++-----D5.4 |*****+++++++++++++++++++++++++-----------D5.5 | | |******++++++++++++++++++++++++-----------D5.6 | | | | |******++++++++++++++++++++++++-----------D6.0 | | | | |******++++++++++++++++++++++++-----------D

https://wiki.php.net/rfc/php53eol

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/212013/3/14

5.3.225.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/152013/8/16

5.4.185.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

PHP 5.5 改善/変更のポイント

�速度改善:5%~10%

�ジェネレータ:反復処理の所要メモリを低減

�パスワードハッシュAPI

�オペコードキャッシュの標準搭載化: Zend OPcache

�いくつかの構文の改善

�セッションアダプション回避(PHP 5.5.2)

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.phpstrcat(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

ジェネレータ構文

� ジェネレータ:イテレータを関数で定義(Python)�例:ファイル各行処理: ファイル全体読込み→メモリが大量に必要

<?phpfunction 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

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

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#

$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文字列を作るのが面倒だった

生成

検証

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

その他の機能(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

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.2PHP 5.4.20

U+FFFD U+FFFD U+FFFD U+FFFD U+24B62PHP 5.5.1PHP 5.4.19

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

PHP 5.6

�リリース: 2014/6 (?)

�PHP 5.5と同様に小幅な改訂の見込み

�RFC(http://wiki.php.net/rfc)を参照

�内部演算子オーバーロード実装とGMP改善

�セッション処理改善(by 大垣さん)

FR #17860 セッション変更の自動検出

内部演算子オーバーロード/GMP改善

(https://wiki.php.net/rfc/operator_overloading_gmp)

�内部演算子オーバーロードの仕組み

$c = gmp_add($a, $b); $c = $a + $b;

� GMPのキャスト、ダンプ、シリアル化を可能にする

$c = gmp_init(42);echo $c; // 42var_dump((string)$c); // string(2) “42var_dump($s = serialize($c)); // string(33) “0:3:”GMP”:1:{s:3:”num”;s:2:”42”;}”

PHP開発の今

PHPは歯ブラシのようなもの。いつも使う役に立つシンプルなツールだけど、誰も歯ブラシのことなんて気にしないよね。PHPは「問題を解くためのシンプルなツール」なのさ。

(http://en.wikiquote.org/wiki/Rasmus_Lerdorf)Rasmus語録

PHP開発にはロードマップがない?

PHP Parser by Nikita Popovhttps://github.com/nikic/PHP-Parser

PHPerには言語愛がないのか?

・PHPは既に熟成期にあり、新機能は既存の機能と干渉する可能性がある-> RFCは否定的な意見を受ける: Anthony氏開発離脱宣言・ロードマップを示すと提案の自由度を縛ってしまう

PHPの未来

php

frameworkapplications / plugins

pecl

users

� TIOBE index : ZF2がPHP人気上昇の理由と分析→ WordPressを始めとするアプリの広がりが理由では?�Webの進化に柔軟に対応�高性能かつ現実的な解を提供する

� スケーラブル:ブログから最大級のSNSサイトまで

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

メーリングリストメーリングリストメーリングリストメーリングリスト