Más contenido relacionado
La actualidad más candente (20)
Similar a PHPの今とこれから2014 (20)
PHPの今とこれから2014
- 5. PHP アンケート 2014
主に使っているPHPのバージョン 1) PHP <=5.2 2) PHP 5.3 3) PHP 5.4 4) PHP 5.5 5) PHP 5.6 6) 使ってない
5
- 6. PHPバージョン分布
引用: W3Techs.com, 2014/9/21
0.1%
3.7%
23.1%
48.4%
23.3%
1.3%
5.6
5.5
5.4
5.3
5.2
5.1
(51.9%)
(39.3%)
(6.4%)
5.2半減、5.3微減、5.4大幅増(4倍)
EOLとなったPHP 5.3以前のユーザが約3/4 register_globalsの呪い?
6
- 7. PHPの歩み
2004
2005
2006
2007
2008
2009
2010
5.3
`09/6
・名前空間
・クロージャ
・遅延静的束縛
・GC改善
・MySQLnd
7.0
PHP
10周年
JPUG
10周年
フレームワーク
AJAX
XML
W/S API
2011
2012
PHPcon 関西
PHPcon
北海道
5.4
・Traits
- 速度改善
- MB対応標準化
- 組込みWebサーバ
- レガシー機能削除
`12/3
6.0
`10/3 キャンセル
・Unicode
`10/12 (EOL)
5.0
`04/7
5.1
`05/11
5.2
`06/11
・メモリ/速度改善
・入力フィルタ
・速度改善
・PDO
スマホ
2013
5.5
・ジェネレータ
- キャッシュ
- パスワードハッシュ
`13/6
`14/8 (EOL)
2014
php.net攻撃される (2013/10)
クラウド
2015
5.6
・デバッガ
・定数スカラー式
`14/8
Hack/HHVM
phpng
5.7
2016
・ZE2
・SimpleXML
・SQLite, MySQLi
7
- 8. PHP リリースとPHP 5.3 EOL
PHP 5.3
EOLをPHP 5.5リリース時に宣言(2013/6)
セキュリティ修正のみ実施(1年間) → 2014/8にEOL
https://wiki.php.net/rfc/releaseprocess
https://wiki.php.net/rfc/php53eol
リリースサイクル:1年
ライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年)
PHP 5.4
PHP 5.4.33がバグ修正最終版
セキュリティ修正:1年 (→ 2015/8にEOL)
8
- 9. PHPリリース情報
*1 X.509証明書の時刻スタンプ処理:任意コード実行、DoS
*2 null byte injection in gd
*3 buffer overflow in php_parserr (dns)
Release
5.3
5.4
5.5
変更
2013/12/12
5.3.28
5.4.23
5.5.7
CVE-2013-6420 (openssl_x509_parse)*1,4248
2014/1/9
5.4.24
5.5.8
CVE-2013-6712 (dateinterval,DoS)
2014/2/6
5.4.25
5.5.9
CVE-2013-7226 (gdImageCrop,DoS)
2014/3/6
5.4.26
5.5.10
CVE-2014-1943,2270
2014/4/3
5.4.27
5.5.11
CVE-2013-7345
2014/5/1
5.4.28
5.5.12
CVE-2014-0185(sapi/fpm,権限設定)
2014/5/29
5.4.29
5.5.13
CVE-2014-0238,0237
2014/6/26
5.4.30
5.5.14
CVE-2014-3981,0207,3478,3479,3480,3487
2014/8/14
5.3.29
5.3 EOL: CVE-2013-6712,2014-*
2014/8/21
5.4.32
5.5.16
CVE-2014-3538,3587, 5120*2,3597*3,4698,4670
CVE: Common Vulnerabilities and Exposures
fileinfo関連
Heartbleed,ShellShock
9
- 10. PHP 5.6 改善/変更のポイント
若干の速度改善:5%?
php://inputが再利用可に。POST用メモリ半減
可変長引数・配列展開の構文追加(’…’構文)
累乗演算子(’**’構文)
定数のスカラー式
useによる関数/定数のインポート
デバッガ標準搭載:phpdbg
10
- 12. PHP5.6: 地道な改善
Athlon II X4 640 3.0GHz, Ubuntu 14.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
12
- 13. PHP5.6: 地道な改善
Athlon II X4 640 3.0GHz, Ubuntu 14.04
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
13
- 14. PHP5.6: ’…’ 構文
可変長引数: オプション部(可変部)を配列で取得 従来のfunc_get_args()より簡潔に記述できる
関数引数における配列アンパック:Rubyのsplat演算子
function f($val, ...$params) { echo "$val:",count($params);
}
f(“taro”, “users”,12 );
全オプション変数を保持
taro : 2
$v = [1,2,3];
f("taro",...$v);
$v = [1,2,3];
f("taro",$v[0], $v[1], $v[2]);
taro : 3
14
- 16. PHP5.6: 文字コード設定標準化
文字コード関連オプションを標準化
https://wiki.php.net/rfc/default_encoding
input_encoding
internal_encoding
output_encoding
iconv.*
mbstring.*
input_encoding
http_input
internal_encoding
internal_encoding
output_encoding
output_encoding
mbstring.http_input
input_encoding
例:
デフォルトの文字コード:default_charset(デフォルト:UTF-8)
旧設定はE_DEPRECATEDを発生(PHP 7.0以降で廃止予定)
16
旧設定
新設定
- 18. <?php
namespace Foo¥Moo { const A = 123; function fun() { echo A+1;}
}
namespace { use const Foo¥Moo¥A; use function Foo¥Moo¥fun;
echo A; fun();
}
PHP5.6: その他の機能(2)
use で定数・関数を導入可能
123
124
18
- 20. HHVM
Facebookが開発/公開するPHP/Hack実行環境
2010/2 HipHop for PHP:C++トランスレータ、互換性、管理
2011/12 HipHop Virtual Machine(HHVM):JITベースVM
リソース低減化(>66%)と速度改善(>5x), WP (2.5x)
FastCGI+Webサーバで実行
PHPスクリプト
バイトコード
パース/コンパイル
Zend VM
実行
PHP/Hackスクリプト
HipHopバイトコード(HHBC)
パース/コンパイル(AST)
JITコンパイラ(最適化)
ネーティブコード
HHVM
実行(x86-64,ARM64)
20
hhvm.com
- 21. Hack
PHPを拡張したHHVM用の言語: 2014/2公開
目的:大規模開発における開発効率化
関数、クラスの型アノテーション:型チェッカ
PHPからの移行は容易:移行ツール、gradual typing
HHVMにおける最適化にも寄与
型拡張:generics,collections,nullable
非同期プログラミング:async,await
21
hacklang.org
- 22. Hackのコード例
<?hh
function add(int $a, int $b) : int {
return $a + $b;
}
echo add(1,2);
echo add(1,”a”);
.hhconfig をトップに配置
hh_clientで型チェック
hhvmで実行
<?php
function add($a, $b) {
return $a + $b;
}
echo add(1,2);
echo add(1,”a”);
エラー
22
- 24. PHP 5.7
PHP 7.0開発に2年要する見込み
2015/8 リリース?(リリース自体も未定)
機能改善内容は未定(小規模な改善と予想)
https://wiki.php.net/rfc/
24
- 25. PHP Next Generation
2014/5 phpng発表:メモリ管理、内部変数仕様改善
性能はhhvmに追い付いてきた(WP3.9で -15%)
ユーザ仕様は上位互換性維持、エクステンションは要改定
2014/7 次期リリース名称を PHP 7 (phpngベース)に決定
PHP 7のリリースは? 2015にα版(?)、2016リリース(?)
https://wiki.php.net/rfc/php6
https://wiki.php.net/phpng
25
- 26. PHP 7に向けて( 検討中)
エンジン/メモリ管理大幅改善:JITサポート?
ASTベースコンパイラ(スクリプト→中間コード)
OpCacheエンジン統合化
非同期プログラミング
64bit対応
Unicodeサポート
HTTP2
ネーティブアノテーション/スカラータイプヒンティング
https://wiki.php.net/ideas/php6
Abstract syntax tree : AST
* HHVMでサポート済み
26
- 27. より速く、快適に
Athlon II X4 640 3.0GHz, Ubuntu 14.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
PHP 7.0
HHVM 3.3
実行時間[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
27
- 28. より速く、快適に
Athlon II X4 640 3.0GHz, Ubuntu 14.04
0
5
10
15
20
25
30
PHP 5.3
PHP 5.4
PHP 5.5
PHP 5.6
PHP 7.0
HHVM 3.3
実行時間[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
28
- 29. PHPの未来
php
frameworks
applications / plugins
pecl
users
Hack/HHVMリリースの持つ意味
Webの進化に迅速に対応できているか?
外部開発者との密な連携が課題
実装間の互換性:アプリ作成側の開発負荷低減
高性能かつ現実的な解を継続的に提供する
zend
hni
29
hhvm
hack
phalcon
Zephir
- 30. PHPユーザ相互の情報交換および コミュニティの健全な発展
設立趣旨
• 高性能Webミドルウエアへのニーズ増大
• オープンソースソフトウエアの発展
背景
国内PHPユーザの増加
活動内容
ドキュメント整備
セミナー/イベント
メンバー/スタッフ
国際化
http://www.php.gr.jp/
Web
・PHPユーザ会員と思ったらメンバー
・運営するのも楽しいかも
日本PHPユーザ会
(2000年4月発足)
php-users, php-dev, php-doc, phpug-admin
メーリングリスト
30
- 31. 31
2F小展示
4Fコンベンション
3F特別会議室
6F会議室C
PHPコアから読み解くPHP5.5
Ansibleではじめるサーバ作 業の自動化
初心者セッション
ブラウザだけでOK!
AzureでさわっておぼえるPHP(登録制)
メルカリの超高速開発を支え るPHP
Mysqlnd徹底解説
擬人化から始めるOOP超入 門
安全なPHPアプリケーションの 作り方2014
PHPerがAWSと出会って DevOpsを目指した話
パーフェクト成長戦略
(学生・新卒エンジニア向け)
PHPにおけるI/O多重化と yield
ウエブエンジニアのための Angular.js入門
Webデザイナ向けGithub
ハンズオン
HHVM+Hack==PHP++
PHPエンジニアのためのアクセ スログ解析基盤構築入門
ウェブエンジニアに必要なセ キュリティスキルとは
Good Parts of PHP and
The UNIX Philosophy
LT CMS/DB
Webアプリのデプロイ今昔物 語
初心者向けPHPソースコード 診断
エンジニアだって、企画書に 強くなった方がいい
LT無差別級
メイン
Bトラック
Cトラック
ワークショップ
10:50
11:30
12:10
12:40
13:30
14:10
14:50
15:30
PHP Conference 2014 の見どころ