Post on 16-Apr-2017
PHPの今とこれから2014
PHP Conference 2014, Tokyo
October 11, 2014
廣川 類 (日本PHPユーザ会)
1
自己紹介:ひろかわ
PHPのホビーユーザ(1996~)
PHPマニュアルの日本語化
マルチバイト化:mbstringエクステンション
PHP関連書籍:
2
PHPカンファレンス皆勤中!
アジェンダ
PHPの今
新しいPHP
3
PHPとは?
PHPは主にWebアプリケーションに使用されるスクリプト言語
1995年の誕生以来、Webと共に成長、進化
244M サイト (39%)のWebサーバーでPHPが実行されている
82.0%
17.3%
2.7% 0.7%
0.6%
サーバサイドスクリプト言語
PHP
ASP.NET
Java
ColdFusion
Perl
引用: W3Techs.com, 2014/10/1
60.9%
7.9%
5.2% 2.9% 2.7%
CMSシェア
WordPress
Joomla
Drupal
Blogger
Magento
4
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
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
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
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
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
PHP 5.6 改善/変更のポイント
若干の速度改善:5%?
php://inputが再利用可に。POST用メモリ半減
可変長引数・配列展開の構文追加(’…’構文)
累乗演算子(’**’構文)
定数のスカラー式
useによる関数/定数のインポート
デバッガ標準搭載:phpdbg
10
PHP 5.6:互換性に関する変更
default_charset(UTF-8)がhtmlentities()等のデフォルトに
文字コード設定の統一化(mbstring.*は非推奨)
非互換コンテキストからのコール(非staticメソッドのstaticコール
など)が非推奨に
SSL/TLS機能強化: ピア証明書/ホスト名検証デフォルト有効化
中間者攻撃(MITM)の防止
サーバ クライアント 中間者
認証局
11
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
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
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
PHP5.6: phpdbgデバッガ標準化
http://phpdbg.com/
SAPIとして実装された軽量デバッガ(PHP >=5.4をサポート)
リモートデバッグ対応(Javaクライアント付属)
15
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
旧設定 新設定
PHP5.6: その他の機能(1)
名前付き定数宣言、引数デフォルト値にスカラー式を使用可能
累乗演算子(’**’構文)
<?php
const PI = 3.14;
const RADIUS = 10.0;
const AREA = PI*RADIUS**2;
function f($r = RADIUS + 2.0) {
return $r;
}
echo AREA;
echo f();
314
12
17
<?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
アジェンダ
PHPの今
新しいPHP
19
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
Hack
PHPを拡張したHHVM用の言語: 2014/2公開
目的:大規模開発における開発効率化
関数、クラスの型アノテーション:型チェッカ
PHPからの移行は容易:移行ツール、gradual typing
HHVMにおける最適化にも寄与
型拡張:generics,collections,nullable
非同期プログラミング:async,await
21
hacklang.org
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
PHP互換環境の課題
互換環境いろいろ:hhvm, HippyVM, Recki-CT, Zephir
実行環境(特にJIT)が限定される
PHP(Zend VM)との互換性
23
PHP言語仕様を策定:言語実装依存の問題を分離
https://github.com/php/php-langspec
PHP 5.7
PHP 7.0開発に2年要する見込み
2015/8 リリース?(リリース自体も未定)
機能改善内容は未定(小規模な改善と予想)
https://wiki.php.net/rfc/
24
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
PHP 7に向けて( 検討中)
エンジン/メモリ管理大幅改善:JITサポート?
ASTベースコンパイラ(スクリプト→中間コード)
OpCacheエンジン統合化
非同期プログラミング
64bit対応
Unicodeサポート
HTTP2
ネーティブアノテーション/スカラータイプヒンティング
https://wiki.php.net/ideas/php6
Abstract syntax tree : AST * HHVMでサポート済み 26
より速く、快適に
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
より速く、快適に
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
PHPの未来
php
frameworks
applications / plugins
pecl
users
Hack/HHVMリリースの持つ意味 Webの進化に迅速に対応できているか?
外部開発者との密な連携が課題
実装間の互換性:アプリ作成側の開発負荷低減
高性能かつ現実的な解を継続的に提供する
zend
hni
29
hhvm
hack
phalcon Zephir
PHPユーザ相互の情報交換およびコミュニティの健全な発展
設立趣旨
• 高性能Webミドルウエアへのニーズ増大
• オープンソースソフトウエアの発展
背景
国内PHPユーザの増加
活動内容
ドキュメント整備
セミナー/イベント
メンバー/スタッフ 国際化
http://www.php.gr.jp/ Web
・PHPユーザ会員と思ったらメンバー ・運営するのも楽しいかも
日本PHPユーザ会
(2000年4月発足)
php-users, php-dev, php-doc, phpug-admin
メーリングリスト
30
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 の見どころ
PHPカンファレンス紹介
Twitterアカウント:@phpcon , ハッシュタグ:#phpcon2014
Facebookページ:phpcon.japan
PHP Conference 2014関連情報
http://phpcon.php.gr.jp/w/2014/#program
32
http://www.flickr.com/photos/skoop/2965898655/sizes/m/in/photostream/
PHPカンファレンス2014を お楽しみください!
33