SlideShare a Scribd company logo
php と
SAPI と
ZendEngine2 と
2014/01/22
第1回 PHP勉強会@相模原
do_aki
@do_aki
http://do-aki.net/
php and sapi and zendengine2 and...
20代男子の
php に対するイメージ
(2014年 俺脳内調べ)
1位

洗練された ZendEngine2 は、たゆまぬ改
良により、マイナバージョンアップですら
ABI が変更されうる

2位

トリッキーな Zend Memory Managaer。
その複雑さのためか、ほとんど追加・改良
されることがない (Zend/zend_alloc.c)

3位

SAPIにより、多くの環境に最適化された
入出力が実現されている感じがする

4位 選べる仮想マシン実装。ただし、標準で
提供されている方式以外での実績は未知数
5位 その他
<?php

(I talk about)

Not php script
but php language system

#include "php.h"
php のコアって
Those who know don't talk.
(知ってる人は教えようとしない)
Those who talk don't know.
(教えてる人はあまり知らない)

PHP: Zend API: PHP のコアをハックする より
http://www.php.net/manual/ja/internals2.ze1.zendapi.php
php and sapi and zendengine2 and...
書籍、洋書ならphpコアの話あるけどやっぱり古め

Advanced PHP Programming (2004)
http://books.google.co.jp/books?id=mCpnlNYzqOQC
Extending and Embedding PHP (2006)
http://books.google.co.jp/books?id=zMbGvK17_tYC
PHP Architecture

PHP Script
Web
Server
or

OS

Extensions
SAPI
module

Zend
Engine2
SAPI module
• Web サーバ/OS
と PHP の橋渡
し
• エントリーポ
イントはここ
にある
• 21種類の
bundle module

PHP Script
Extensions
SAPI
module

Zend
Engine2
PHP SAPIs
aolserver / apache / apache2filter /
apache2handler / apache_hooks /
caudium / cgi / cli / continuity / embed
/ fpm / isapi / litespeed / milter / nsapi /
phttpd / pi3web / roxen / thttpd / tux /
webjames
(under sapi directory in php-5.5.8 source code)
SAPI module
SAPI module
sapi_module_struct
name
startup function
shutdown function
activate function
deactivate function
ub_write function
header_handler function
executable_location
php_ini_ignore
…

register
and call

callback

Zend
Engine2
ZendEngine2
• Parser / Compiler
• VirtualMachine
• Memory
Manager
• Garbage
Collection
• (TSRM)
etc…

PHP Script
Extensions
SAPI
module

Zend
Engine2
PHP(Zend) Extension
• Core
• Bundle
Extensions
• PECL
Extensions
• PHP Ext と
Zend Ext の違
いはよくわか
らない

PHP Script
Extensions
SAPI
module

Zend
Engine2

PHP extensionとZend extensionの違い - hnwの日記 http://d.hatena.ne.jp/hnw/20130715
Extension
load
and call

Zend
Engine2

(register)

callback

PHP Extension
zend_module_entry
name
function entry
MINIT function
MSHUTDOWN function
RINIT function
RSHUTDOWN function
MINFO function
extension version
…
PHP Script
• <?php
• OpCode に変換
され、VM で実
行
• Extension や
SAPI module を
介して外部と
の入出力が行
われる

PHP Script
Extensions
SAPI
module

Zend
Engine2
SAPI
life of php process
TSRM startup (only ZTS)
SAPI startup
PHP module startup (Zend startup)
PHP request startup
execute php script
PHP request shutdown
PHP module shutdown
SAPI shutdown
TSRM shutdown
startup process in SAPI
• prepare sapi_module (sapi_module_struct)
• TSRM startup
– TSRM:=Thread Safe Resource Manager

• SAPI startup
– SAPI:= Server API
– SG (sapi_globals_struct@main/SAPI.h)

• call php_module_startup
– main/main.c
php_module_startup
• call zend_startup
• init some global vars (EG,PG,SG,GC_G)
• init some constant
– PHP_VERSION,PHP_OS,PHP_SAPI etc...

• register auto globals ($_GET, $_POST …)
• read and scan ini files
• init php (zend) extensions
zend_startup
• init GLOBAL TABLE
– FUNCTION/CLASS/AUTO_GLOBALS/CONSTANTS

• init INI_SCNG / LANG_SCNG
• init interned strings
• register builtin_functions
– strlen, func_get_arg, class_exists, create_function
etc... (Zend/zend_builtin_functions.c)

• register standard constants
– E_ERROR, TRUE, FALSE, NULL etc...

• register $GLOBALS
request process (apache)
• prepare SG(request_info)
• call php_request_startup
– reset gc / compile/ executer
– init output buffering stack
– sapi_activate
– init PG(http_globals)

• execute php script
process chart
UA

apache

SAPI
(mod_php)

[load module]

zend
engine

php script

php_ap2_
register_hook

register_hook

[post_config]

php_apache_
server_startup

sapi_startup /
php_module_start
up (zend_startup)

リクエスト待ち

compiler/scann
er/ini/function_
table/class_tabl
e 等のメモリ
確保
UA

apache

SAPI
(mod_php)

zend
engine

php script

php_handler

http request
[handler]

SG(request_info)
.query_string
from apache

php_request_startup
ap_get_brigade(input_fi
lter…
apr_table_get(
headers,”cookie”)

php_hash_envir
onment にて、
$_GET,$_POST,
$_COOKIE 等を
構築

sapi_module.read_post

sapi_module.read_cookies

zend_execute_scripts

zend_compile_file
zend_execute
UA

SAPI
(mod_php)

apache

ap_write

apr_table_set
or other

http response

zend
engine

php script

sapi_module.ub_wri
te

echo (ZEND_ECHO)

sapi_module.header
_handler

header
最後に
• php 処理系の全体像を解説しました
• プロセスの持ち方や、startup/shutdown の
制御は SAPI によって異なります
• SAPI と ZendEngine2 の責任の境界がイマ
イチ分からない (SG や sapi_module の扱
い)

• 間違ってたら指摘ください
End Of Slide

Let’s enjoy PHP hack life ;-)

More Related Content

What's hot (20)

PDF
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
 
PDF
PHP の GC の話
y-uti
 
PPTX
Nmapの真実
abend_cve_9999_0001
 
PDF
How to run P4 BMv2
Kentaro Ebisawa
 
PDF
Pythonでパケット解析
euphoricwavism
 
PDF
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Yuichi Ito
 
PDF
PHP7で変わること ——言語仕様とエンジンの改善ポイント
Yoshio Hanawa
 
PDF
Go入門
Takuya Ueda
 
PDF
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
PDF
JIT のコードを読んでみた
y-uti
 
PDF
いまさら恥ずかしくてAsyncをawaitした
Kouji Matsui
 
PPTX
async/await のしくみ
信之 岩永
 
PDF
Ethernetの受信処理
Takuya ASADA
 
PPTX
Writing php extensions in golang
do_aki
 
PDF
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
 
PPTX
Php internal architecture
Elizabeth Smith
 
PDF
PHP 8 で Web 以外の世界の扉を叩く
shinjiigarashi
 
PDF
MySQL 5.7とレプリケーションにおける改良
Shinya Sugiyama
 
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
 
PDF
Form認証で学ぶSpring Security入門
Ryosuke Uchitate
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
 
PHP の GC の話
y-uti
 
Nmapの真実
abend_cve_9999_0001
 
How to run P4 BMv2
Kentaro Ebisawa
 
Pythonでパケット解析
euphoricwavism
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Yuichi Ito
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
Yoshio Hanawa
 
Go入門
Takuya Ueda
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
JIT のコードを読んでみた
y-uti
 
いまさら恥ずかしくてAsyncをawaitした
Kouji Matsui
 
async/await のしくみ
信之 岩永
 
Ethernetの受信処理
Takuya ASADA
 
Writing php extensions in golang
do_aki
 
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
 
Php internal architecture
Elizabeth Smith
 
PHP 8 で Web 以外の世界の扉を叩く
shinjiigarashi
 
MySQL 5.7とレプリケーションにおける改良
Shinya Sugiyama
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
 
Form認証で学ぶSpring Security入門
Ryosuke Uchitate
 

Viewers also liked (20)

PDF
Php Introduction nikul
Nikul Shah
 
PDF
Internal php and gdb php core
alpha86
 
PDF
A look at FastCgi & Mod_PHP architecture
Aimee Maree Forsstrom
 
PDF
Create your own PHP extension, step by step - phpDay 2012 Verona
Patrick Allaert
 
PPTX
Techtalk2015 MOD_PHP vs PHP-FPM
Webscale
 
PDF
mod_php vs FastCGI vs FPM vs CLI
Jacques Woodcock
 
PPTX
X math new pattern exam in Telangana for 2014- 15
Datha Prasada Rao Vanam
 
PDF
Barometro kayak-2013
David Mora
 
PPT
Međuinduktivitet i zračni transformatori (slike)
IrmaKajd
 
PPT
Бренд-комьюнити от Sitko.Ru (Brand-Community of Sitko.Ru)
Serj Nazarov
 
PDF
Conto+termico ordingroma 4_6+feb+2015 (2)
Gestore dei Servizi Energetici
 
PDF
ספר וטהר לבנו השלם.
יוחנן ריינר
 
PDF
Gianni Marconato - Costruire conoscenza professionale in rete attraverso la n...
KnowCamp
 
PDF
Privacy-Aware Data Management in Information Networks - SIGMOD 2011 Tutorial
Kun Liu
 
PPSX
Happy New Year
Minh Anh Nguyen
 
KEY
電子書刺激擴大閱讀產業
Sophie Pang
 
PPTX
AOA - Annual OMEL Conference Encourages Osteopathic Discourse
Dr. Michael Thomas (Neurosurgeon)
 
PDF
Ta mnimeiaeinaigiromas167
Tassos Karampinis
 
PPTX
Curing Shopper Boredom
Lisa Roberts
 
PPTX
Duurzame asfaltontwikkelingen | Jan Voskuilen (InfraTech 2015)
CROW
 
Php Introduction nikul
Nikul Shah
 
Internal php and gdb php core
alpha86
 
A look at FastCgi & Mod_PHP architecture
Aimee Maree Forsstrom
 
Create your own PHP extension, step by step - phpDay 2012 Verona
Patrick Allaert
 
Techtalk2015 MOD_PHP vs PHP-FPM
Webscale
 
mod_php vs FastCGI vs FPM vs CLI
Jacques Woodcock
 
X math new pattern exam in Telangana for 2014- 15
Datha Prasada Rao Vanam
 
Barometro kayak-2013
David Mora
 
Međuinduktivitet i zračni transformatori (slike)
IrmaKajd
 
Бренд-комьюнити от Sitko.Ru (Brand-Community of Sitko.Ru)
Serj Nazarov
 
Conto+termico ordingroma 4_6+feb+2015 (2)
Gestore dei Servizi Energetici
 
ספר וטהר לבנו השלם.
יוחנן ריינר
 
Gianni Marconato - Costruire conoscenza professionale in rete attraverso la n...
KnowCamp
 
Privacy-Aware Data Management in Information Networks - SIGMOD 2011 Tutorial
Kun Liu
 
Happy New Year
Minh Anh Nguyen
 
電子書刺激擴大閱讀產業
Sophie Pang
 
AOA - Annual OMEL Conference Encourages Osteopathic Discourse
Dr. Michael Thomas (Neurosurgeon)
 
Ta mnimeiaeinaigiromas167
Tassos Karampinis
 
Curing Shopper Boredom
Lisa Roberts
 
Duurzame asfaltontwikkelingen | Jan Voskuilen (InfraTech 2015)
CROW
 
Ad

Similar to php and sapi and zendengine2 and... (16)

PDF
スクリプト言語PHP攻略法
Rui Hirokawa
 
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
 
PDF
PHPの今とこれから 2013
Rui Hirokawa
 
PPTX
Php in ruby
do_aki
 
PDF
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
Yoshio Hanawa
 
PDF
PHPの今とこれから2014
Rui Hirokawa
 
PPTX
PHP基礎勉強会
Yuji Otani
 
PDF
PHP で実行中のスクリプトの動作を下から覗き見る
shinjiigarashi
 
PDF
PHPの今とこれから2020
Rui Hirokawa
 
PPT
2009 PHP初心者
Hideo Kashioka
 
PDF
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
Hisateru Tanaka
 
PPTX
Immortal
do_aki
 
PDF
"More" Introduction to Zend Tool
sasezaki
 
PDF
phpext-2-takagi
Masahiro Takagi
 
PDF
第1回 松本勉強会 2012 05 11 - 公開版
Ryosuke MATSUMOTO
 
PDF
PHP & Queue
sasezaki
 
スクリプト言語PHP攻略法
Rui Hirokawa
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
 
PHPの今とこれから 2013
Rui Hirokawa
 
Php in ruby
do_aki
 
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
Yoshio Hanawa
 
PHPの今とこれから2014
Rui Hirokawa
 
PHP基礎勉強会
Yuji Otani
 
PHP で実行中のスクリプトの動作を下から覗き見る
shinjiigarashi
 
PHPの今とこれから2020
Rui Hirokawa
 
2009 PHP初心者
Hideo Kashioka
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
Hisateru Tanaka
 
Immortal
do_aki
 
"More" Introduction to Zend Tool
sasezaki
 
phpext-2-takagi
Masahiro Takagi
 
第1回 松本勉強会 2012 05 11 - 公開版
Ryosuke MATSUMOTO
 
PHP & Queue
sasezaki
 
Ad

More from do_aki (20)

PPTX
Tritonn から Elasticsearch への移行話
do_aki
 
PPTX
PHPとシグナル、その裏側
do_aki
 
PPTX
再考:列挙型
do_aki
 
PPTX
signal の話 或いは Zend Signals とは何か
do_aki
 
PPTX
PHP AST 徹底解説(補遺)
do_aki
 
PPTX
php7's ast
do_aki
 
PPTX
N対1 レプリケーション + Optimizer Hint
do_aki
 
PPTX
20150212 プレゼンテーションzen
do_aki
 
PPTX
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
do_aki
 
PPTX
20141017 introduce razor
do_aki
 
PPTX
20141011 mastering mysqlnd
do_aki
 
PPTX
php in ruby
do_aki
 
PPTX
PHP から Groonga を使うにはこんなコードになるよ!
do_aki
 
PPTX
N:1 Replication meets MHA
do_aki
 
PDF
Php radomize
do_aki
 
PPTX
セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor
do_aki
 
PPTX
マスタN対スレーブ1レプリケーションの作り方 ~あれから~
do_aki
 
PPTX
Excel is image viewer
do_aki
 
PDF
A bridge between php and ruby
do_aki
 
PDF
Ruby and comparison_and...php
do_aki
 
Tritonn から Elasticsearch への移行話
do_aki
 
PHPとシグナル、その裏側
do_aki
 
再考:列挙型
do_aki
 
signal の話 或いは Zend Signals とは何か
do_aki
 
PHP AST 徹底解説(補遺)
do_aki
 
php7's ast
do_aki
 
N対1 レプリケーション + Optimizer Hint
do_aki
 
20150212 プレゼンテーションzen
do_aki
 
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
do_aki
 
20141017 introduce razor
do_aki
 
20141011 mastering mysqlnd
do_aki
 
php in ruby
do_aki
 
PHP から Groonga を使うにはこんなコードになるよ!
do_aki
 
N:1 Replication meets MHA
do_aki
 
Php radomize
do_aki
 
セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor
do_aki
 
マスタN対スレーブ1レプリケーションの作り方 ~あれから~
do_aki
 
Excel is image viewer
do_aki
 
A bridge between php and ruby
do_aki
 
Ruby and comparison_and...php
do_aki
 

Recently uploaded (9)

PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
 
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
 
PDF
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
 
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
 
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
 
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
 
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
 
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
 
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 

php and sapi and zendengine2 and...