Contenu connexe
Similaire à PHPの今とこれから 2013 (20)
Plus de Rui Hirokawa (15)
PHPの今とこれから 2013
- 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. 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. 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
- 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. ジェネレータ構文
ジェネレータ:イテレータを関数で定義(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
- 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. 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. その他の機能(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. 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
- 19. PHP 5.6
リリース: 2014/6 (?)
PHP 5.5と同様に小幅な改訂の見込み
RFC(http://wiki.php.net/rfc)を参照
内部演算子オーバーロード実装とGMP改善
セッション処理改善(by 大垣さん)
FR #17860 セッション変更の自動検出
- 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
メーリングリストメーリングリストメーリングリストメーリングリスト