More Related Content Similar to php and sapi and zendengine2 and... Similar to php and sapi and zendengine2 and... (20) php and sapi and zendengine2 and...7. 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
11. SAPI module
• Web サーバ/OS
と PHP の橋渡
し
• エントリーポ
イントはここ
にある
• 21種類の
bundle module
PHP Script
Extensions
SAPI
module
Zend
Engine2
12. 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)
14. ZendEngine2
• Parser / Compiler
• VirtualMachine
• Memory
Manager
• Garbage
Collection
• (TSRM)
etc…
PHP Script
Extensions
SAPI
module
Zend
Engine2
15. 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
17. PHP Script
• <?php
• OpCode に変換
され、VM で実
行
• Extension や
SAPI module を
介して外部と
の入出力が行
われる
PHP Script
Extensions
SAPI
module
Zend
Engine2
19. 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
20. 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
21. 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
22. 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
23. 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
27. 最後に
• php 処理系の全体像を解説しました
• プロセスの持ち方や、startup/shutdown の
制御は SAPI によって異なります
• SAPI と ZendEngine2 の責任の境界がイマ
イチ分からない (SG や sapi_module の扱
い)
• 間違ってたら指摘ください