SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
 

Mais procurados (20)

実"戦"CakePHP Plugin
実"戦"CakePHP Plugin実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
PHP, Now and Then 2011
PHP, Now and Then 2011PHP, Now and Then 2011
PHP, Now and Then 2011
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
FuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみたFuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみた
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
PECL を数えてみた
PECL を数えてみたPECL を数えてみた
PECL を数えてみた
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 

Destaque

安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
 
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
VOYAGE GROUP
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 

Destaque (20)

安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014
 
PHP 5.5 Zend OPcache
PHP 5.5 Zend OPcachePHP 5.5 Zend OPcache
PHP 5.5 Zend OPcache
 
PHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよPHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよ
 
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
 
PHP 5.5ネーティブキャッシュの話
PHP 5.5ネーティブキャッシュの話PHP 5.5ネーティブキャッシュの話
PHP 5.5ネーティブキャッシュの話
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
PHPにないセキュリティ機能
PHPにないセキュリティ機能PHPにないセキュリティ機能
PHPにないセキュリティ機能
 
PHP超入門@LL温泉
PHP超入門@LL温泉PHP超入門@LL温泉
PHP超入門@LL温泉
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
 
PHPデプロイツールの世界
PHPデプロイツールの世界PHPデプロイツールの世界
PHPデプロイツールの世界
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったこと
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 

Semelhante a PHPの今とこれから2014

WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
Hiroaki Murayama
 
Php5 4勉強会
Php5 4勉強会Php5 4勉強会
Php5 4勉強会
Yuji Otani
 
WordPressで始めるphp入門
WordPressで始めるphp入門WordPressで始めるphp入門
WordPressで始めるphp入門
Hiroaki Murayama
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
 

Semelhante a PHPの今とこれから2014 (20)

PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023
 
PHPの今とこれから2017
PHPの今とこれから2017PHPの今とこれから2017
PHPの今とこれから2017
 
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Php5 4勉強会
Php5 4勉強会Php5 4勉強会
Php5 4勉強会
 
第21回Creators MeetUp
第21回Creators MeetUp第21回Creators MeetUp
第21回Creators MeetUp
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
WordPressで始めるphp入門
WordPressで始めるphp入門WordPressで始めるphp入門
WordPressで始めるphp入門
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 
Vyatta 改造入門
Vyatta 改造入門Vyatta 改造入門
Vyatta 改造入門
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 

Mais de Rui Hirokawa

Mais de Rui Hirokawa (13)

日本PHPユーザ会の紹介
日本PHPユーザ会の紹介日本PHPユーザ会の紹介
日本PHPユーザ会の紹介
 
PHPの中の人によるパネルディスカッション
PHPの中の人によるパネルディスカッションPHPの中の人によるパネルディスカッション
PHPの中の人によるパネルディスカッション
 
PHPの今とこれから2009
PHPの今とこれから2009PHPの今とこれから2009
PHPの今とこれから2009
 
PHPの今とこれから2008
PHPの今とこれから2008PHPの今とこれから2008
PHPの今とこれから2008
 
PHPの今とこれから2007
PHPの今とこれから2007PHPの今とこれから2007
PHPの今とこれから2007
 
PHPの今とこれから2006
PHPの今とこれから2006PHPの今とこれから2006
PHPの今とこれから2006
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語る
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語る
 
php.netの歩き方
php.netの歩き方php.netの歩き方
php.netの歩き方
 
PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~
 
PHPの今とこれから2018
PHPの今とこれから2018PHPの今とこれから2018
PHPの今とこれから2018
 
PHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special EditionPHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special Edition
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
 

PHPの今とこれから2014

  • 1. PHPの今とこれから2014 PHP Conference 2014, Tokyo October 11, 2014 廣川 類 (日本PHPユーザ会) 1
  • 2. 自己紹介:ひろかわ PHPのホビーユーザ(1996~) PHPマニュアルの日本語化 マルチバイト化:mbstringエクステンション PHP関連書籍: 2 PHPカンファレンス皆勤中!
  • 4. 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
  • 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
  • 11. PHP 5.6:互換性に関する変更 default_charset(UTF-8)がhtmlentities()等のデフォルトに 文字コード設定の統一化(mbstring.*は非推奨) 非互換コンテキストからのコール(非staticメソッドのstaticコール など)が非推奨に SSL/TLS機能強化: ピア証明書/ホスト名検証デフォルト有効化 中間者攻撃(MITM)の防止 サーバ クライアント 中間者 認証局 11
  • 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
  • 15. PHP5.6: phpdbgデバッガ標準化 http://phpdbg.com/  SAPIとして実装された軽量デバッガ(PHP >=5.4をサポート)  リモートデバッグ対応(Javaクライアント付属) 15
  • 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 旧設定 新設定
  • 17. 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
  • 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
  • 23. PHP互換環境の課題 互換環境いろいろ:hhvm, HippyVM, Recki-CT, Zephir 実行環境(特にJIT)が限定される PHP(Zend VM)との互換性 23 PHP言語仕様を策定:言語実装依存の問題を分離 https://github.com/php/php-langspec
  • 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 の見どころ
  • 32. PHPカンファレンス紹介 Twitterアカウント:@phpcon , ハッシュタグ:#phpcon2014 Facebookページ:phpcon.japan PHP Conference 2014関連情報 http://phpcon.php.gr.jp/w/2014/#program 32