Your SlideShare is downloading. ×
0
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
了解Php内核
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

了解Php内核

1,570

Published on

0 Comments
17 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,570
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
67
Comments
0
Likes
17
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 了解PHP内核12年10月29日星期⼀一
  • 2. 我是…… Er、T0ny 中心的学生 写PHP的程序员 喜欢各种折腾12年10月29日星期⼀一
  • 3. PHP代码是如何被执行的?12年10月29日星期⼀一
  • 4. C代码 PHP代码 gcc -o xxx ??? $> xxx12年10月29日星期⼀一
  • 5. PHP的生命周期12年10月29日星期⼀一
  • 6. mod_php cli cgi/fastcgi ... SAPI PHP API streams, output, etc. PHP (core) Extensions mysql , standard library, etc Zend API Zend Extension API Zend Engine12年10月29日星期⼀一
  • 7. $ php test.php Call Each extension’s MINIT Request test.php Call Each extension’s RINIT Execute test.php Call Each extension’s RSHUTDOWN Finish cleaning up after test.php Call Each extension’s MSHUTDOWN Terminate php12年10月29日星期⼀一
  • 8. PHP脚本的执行12年10月29日星期⼀一
  • 9. PHP内核 <?php echo “hi”; 词法分析 ?> 语法分析 Zend Engine (执行 opCodes) hi12年10月29日星期⼀一
  • 10. 词法分析 Lex/Flex/re2c12年10月29日星期⼀一
  • 11. array ( array ( <?php 0 => 368, // #define T_OPEN_TAG 368 1 => <?php, echo $hi; 2 => 1, // LINE NO ?> ), array ( 0 => 316, // #define T_ECHO 316 1 => echo, 2 => 2, ), array ( 0 => 371, // #define T_WHITESPACE 371 1 => , 2 => 2, token_get_all ), array ( 0 => 309, // #define T_VARIABLE 309 1 => $haha, 2 => 2, ), 4 => ;, ) @see Zend/zend_language_parser.c12年10月29日星期⼀一
  • 12. <?php T_OPEN_TAG ?> T_CLOSE_TAG $var T_VARIABLE if T_IF function T_FUNCTION for T_FOR echo T_ECHO exit T_EXIT 123 tokens php5.312年10月29日星期⼀一
  • 13. 语法分析 Yacc/Bison12年10月29日星期⼀一
  • 14. T_ECHO echo_expr_list ; echo_expr_list: echo_expr_list , expr { ... } | expr { ... } { ... } zend_do_echo()12年10月29日星期⼀一
  • 15. void zend_do_echo(const znode *arg TSRMLS_DC) { zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); opline->opcode = ZEND_ECHO; opline->op1 = *arg; SET_UNUSED(opline->op2); } @see Zend/zend_compile.c zend_op 出场!12年10月29日星期⼀一
  • 16. struct _zend_op { // 执行该opcode时调用的处理函数 opcode_handler_t handler; znode result; znode op1; znode op2; ulong extended_value; uint lineno; zend_uchar opcode; // opcode代码 };12年10月29日星期⼀一
  • 17. opcodes的执行12年10月29日星期⼀一
  • 18. switch call goto switch (opcode){ switch (opcode){ case ZEND_ADD: case ZEND_ADD: break; goto zend_add: case ZEND_CALL: break; break; ... zend_add: call ZEND_ADD_HANDLER()12年10月29日星期⼀一
  • 19. opcode * 25 + zend_vm_decode[op->op1.op_type] * 5 + zend_vm_decode[op->op2.op_type]; static const opcode_handler_t labels[] 3851 indexs php5.312年10月29日星期⼀一
  • 20. zend_op op_array zend_op zend_op ...12年10月29日星期⼀一
  • 21. symbol_talble *active_op_array *active_symbol_talble op_array1 op_array2 ... execute_data execute_data ...12年10月29日星期⼀一
  • 22. 让我们再来⼀一次……12年10月29日星期⼀一
  • 23. .php SAPI Compiler • Firefox/Chrome • Apache/Nginx • 词法分析 • Console • CLI • 语法分析 • Embed Executor OPCODES Output • Main Script Buffer • Switch/Call/Goto • Function Table •Console • Class Table12年10月29日星期⼀一
  • 24. Finally……12年10月29日星期⼀一
  • 25. <?php $a = 3; $b = 5; if($a = 5 || $b = 7) { $a++; $b++; } $a=? $b=?12年10月29日星期⼀一
  • 26. <?php $a = 3; $b = 5; if( $a = 5 || $b = 7 $a ) { $a++; $b++; } 答案: Zend/zend_language_parser.y12年10月29日星期⼀一
  • 27. 关于TIPI www.php-internal.com12年10月29日星期⼀一
  • 28. reeze er pan12年10月29日星期⼀一
  • 29. Q&A12年10月29日星期⼀一
  • 30. 谢 谢 欢迎联系我: QQ:487223* email: er@zhangabc.com gtalk: er@zhangabc.com blog: www.zhangabc.com12年10月29日星期⼀一

×