PHP的构成
2021-08-27 13:54:02 小德 PHP 访问次数 192

PHP由SAPI,main,Zend,ext组成。

一、SAPI

1、PHP是一个脚本解析器,提供脚本的解析与执行,它的输入是普通文本,然后由PHP解析器按照预先定义好的语法规则进行解析执行。SAPI提供在不同环境中应用这个解析器,命令行,Web等。SAPI视为PHP的宿主环境,为PHP框架的最外层,负责PHP框架初始化。经常用到的SAPI是FPM和cli.

2、ZendVM

介于PHP应用和实际计算机中间,我们编写PHP代码被它执行,是PHP的核心实现,包括编译器、执行器,编译器负责将PHP代码解释为为执行器可识别的指令,执行器负责执行编译器解释出的指令。

3、extension

扩充PHP功能的一种方式,

二、生命周期

image.png

1、模块初始化

PHP框架,Zend引擎的初始化,只在SAPI启动时执行一次,对FPM而言就是在FPM的master进程启动时进行。激活SAPI,初始化请求信息,设置读取POST请求的handler;启动PHP输出;初始化垃圾回收器;启动Zend引擎;注册PHP常量,解析PHP.ini;注册$_GET $_POST$_COOKIE等的handler;注册静态扩展,注册动态扩展等。

2、请求初始化

请求处理前每一个请求都会经历的阶段,对FPM而言,是在worker进程accept一个请求且读取、解析请求数据后的一个阶段。

激活输出,初始化编译器,初始化执行器,激活SAPI,回调各扩展定义的钩子函数。

3、执行脚本阶段

包括编译PHP代码,执行两个核心阶段,编译阶段PHP代码从源代码编译成抽象语法树再到opline指令,opline指令就是Zend引擎可识别的指令,然后指令被执行器执行。

4、请求关闭

flush输出内容,发送HTTP应答的header头、清理全局变量、关闭编译器、关闭执行器,此外回调扩展的各个钩子函数,请求初始化的反向操作,与请你初始化的操作一一对应。

5、模块关闭

与模块关闭阶段反向一一对应,进行资源的清理,PHP各模块的关闭,同时回调各扩展的钩子函数。