PHP7 代码执行过程
PHP 是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下:
PHP 代码 => Token => 抽象语法树 => Opcodes => 执行
各个步骤内容如下:
源代码通过词法分析得到 Token
基于语法分析器将 Token 转换成抽象语法树(AST)
将语法树转换成 Opcode
执行 Opcodes
PHP7 内核架构
要把这张图印在脑海里
zend 引擎
PHP 层
SAPI
扩展部分
PHP 7 源码结构
php 7 的源码主要目录有:sapi 、Zend、main、ext 和 TSRM 这几个。
sapi 目录
几种常用的 SAPI:
1)apache2handler: Apache 扩展,编译后生成动态链接库,配置到 Apache 下。当有 http 请求到 Apache 时,根据配置会调用此动态链接库来执行 PHP 代码,完成与 PHP 的交互。
2)cgi-fcgi: 编译后生成支持 CGI 协议的可执行程序,webserver(如 NGINX)通过 CGI 协议把请求传给 CGI 进程,CGI 进程根据请求执行相应代码后将执行结果返回给 webserver。
3)fpm-fcgi: fpm 是 FastCGI 进程管理器。以 NGINX 服务器为例,当有请求发送到 NGINX 服务器,NGINX 按照 FastCGI 协议把请求交给 php-fpm 进程处理。
4)cli: PHP 的命令行交互接口
Zend 目录
main 目录
ext 目录
TSRM
参考资料