o 1 php n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • o ' x r þ 1 ¦ ^ d...

43
౯ጱPHPԟ౮ᳩԏ᪠ ᑇ๏@ᄆᄆڊ

Upload: dinhmien

Post on 17-Dec-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

PHP @

Page 2: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l 

l  PHP7

l  PHP-AOP Memcached Go

l  GitHub:https://github.com/pangudashu

Page 3: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l  1

l  2 PHP

l  3 PHP

Page 4: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

PHP ……

Page 5: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

1 l  2011 PHP

l  CMS discuz ecshop…

l  html …

l  PHP…

Page 6: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

2 l  “ ”-

……

l 

l  C Sql Server …

l  -> -> ->

Page 7: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l  2 get PHPthinkphp…

l  …

So Easy?

Page 8: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

3 2013.7-2014.3 360 l 

•  MemcachedMysql Linux PHP Smarty MVC Nginx

• 

l  @

Page 9: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

4 2014.7-2015.11

l  API

l  CURD CURD CURD…

l  …

Page 10: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

1

?

Page 11: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

1

l 

l 

l 

l 

Page 12: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l 

l 

l 

Page 13: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l ThinkPHP MVC

l Memcached TCP /

/ - IO

l Yaf PHP / /

l Beego PHP

Page 14: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

源码只是看看就行了? NO!

Page 15: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

2

l 

• 

l 

• 

Page 16: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l 

• 

• 

• 

Page 17: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l  Yaf

l  QFrame ThinkPHP PHP So Easy!

l  Memcached TCP No Problem

l  Beego Go

……

Page 18: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

4

l CURD CURD CURD

…… l 

Page 19: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l 

l 

l 

Page 20: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

2015.11 l 

……

l 

l …

Page 21: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

困惑2: PHP

Page 22: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

2017.4

l  PHP Golang C++

Page 23: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l  Go •  Gc •  •  •  PHP

l 

• 

Page 24: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

PHP

• 

•  ==

•  Go/C++ PHP

•  PHP

Page 25: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

3 PHP

Page 26: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l  PHP swoole

l  PHP PHP

l  PHP bug https://bugs.php.net/

l  PHP go defer…

https://wiki.php.net/rfc/

l  …

l  “ ”PHP PHP

或许可以这样:

Page 27: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

为什么要看内核?

l 

l 

l  PHP

Page 28: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E
Page 29: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

executor

ZEND_FE_RESET_R

循环体statement

ZEND_JMPNZ

empty

foreach后语句

ZEND_FE_FETCH_R

ZEND_ASSIGN

ZEND_FE_FREE

end

Page 30: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

内核怎么看? l  PHP sapi php zend ext...

l  zend PHP

l  PHP

l  gdb

l 

Page 31: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

5、内核探索 l PHP

SAPI

main

ExtensionRun-Time Compiler Executor

ZendVm

1

浏览器

2

3 4

6

5

PHP

•  SAPI

•  PHP web

•  Zend VM PHP

•  PHP/Zend

Page 32: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l 

php_request_startup()请求初始化阶段

php_module_startup()模块初始化阶段

php_module_shutdown()模块关闭阶段

php_request_shutdown()请求关闭阶段

php_execute_script()执行脚本阶段

main()

Page 33: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l  — struct _zval_struct { zend_value value; /* value */ union { struct { ZEND_ENDIAN_LOHI_4( zend_uchar type, /* active type */ zend_uchar type_flags, zend_uchar const_flags, zend_uchar reserved) /* call info for EX(This) */ } v; uint32_t type_info; } u1; union { uint32_t var_flags; uint32_t next; /* hash collision chain */ uint32_t cache_slot; /* literal cache slot */ uint32_t lineno; /* line number (for ast nodes) */ uint32_t num_args; /* arguments number for EX(This) */ uint32_t fe_pos; /* foreach position */ uint32_t fe_iter_idx; /* foreach iterator index */ } u2; };

•  zval zend_value

•  double long bool value

•  zend_array zend_string

zend_object zend_resource

zend_reference

•  16byte

zend_value u1uint32_t

0 8 12 16

Page 34: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l 

• 

•  value value

•  0 value

•  •  0 value

Page 35: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

$a = array(1); //a -> zend_array_1(refcount=1)

$b = $a; //a b -> zend_array_1(refcount=2)

$b[] = 2; //a -> zend_array_1(refcount=1)

//b -> zend_array_2(refcount=1)

var_dump($a);

dup

Page 36: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

l PHP

opline

Call opcode

AST

ZEND_ASSIGN

ZEND_ECHO

ZEND_RETURN

PHP

Page 37: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

1

PHP -----> AST -------> opcodes

<?php $a = “hi, PHP!”; echo $a;

ZEND_AST_STMT_LIST根节点

ZEND_AST_ASSIGN ZEND_AST_ECHO

ZEND_AST_VAR$a

ZEND_AST_ZVAL“hi,PHP!” …

Page 38: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

123

$a

ZEND_ASSIGN 0xffxx 0xffxx

op1

op2…

局部变量区

literals

ZEND_ECHO

ZEND_RETURN

zend_op_array

Page 39: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

2

CALL GOTO SWITCH

CALL

LOOP

CALL HANDLER

END

Page 40: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

zend_execute_data *execute_data = ex;

while (1) {

int ret;

//

if (UNEXPECTED((ret = ((opcode_handler_t)execute_data->opline->handler

)(execute_data)) != 0)) {

if (EXPECTED(ret > 0)) {

execute_data = EG(current_execute_data);

} else {

return;

}

}

}

Page 41: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

不止于此 l 

•  •  •  if else switch •  do while while for foreach •  break goto •  try catch •  Include require •  …

l  ZendMM l  TSRM l Opcache JIT l ……

Page 42: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

学习资料 l http://www.laruence.com/

l http://nikic.github.io/

l http://www.phpinternalsbook.com/

l https://github.com/pangudashu/php7-internal

l Or

Page 43: o 1 PHP n é - pic.huodongjia.com · 3 5 2013.7-2014.3 360 ï ¼ l ´ • O ' X R þ 1 ¦ ^ d Memcached ¨ 5Mysql 5Linux 5PHP Û 5Smarty 5MVC 5Nginx 5 P Ó ø 5 ~ ó … • « E

Thanks

Q&A

PHPCON www.phpconchina.com PPT https://github.com/ThinkDevelopers/PHPConChina

QQ 34449228 135615537 ThinkInLAMP