浅析 PHP7 底层运行机制

PHP7 代码执行过程

PHP 是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下:

PHP 代码 => Token => 抽象语法树 => Opcodes => 执行

各个步骤内容如下:

  • 源代码通过词法分析得到 Token

  • 基于语法分析器将 Token 转换成抽象语法树(AST)

  • 将语法树转换成 Opcode

  • 执行 Opcodes

PHP7 内核架构

640?wx_fmt=jpeg

要把这张图印在脑海里

  • 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

参考资料

640?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值