PHP整个生命周期可以被划分为以下几个阶段:模块初始化阶段、请求初始化阶段、脚本执行阶段、请求关闭阶段、模块关闭阶段。根据不同的SAPI的实现,各阶段的执行情况会略有差异。比如命令模式下,每次执行一个脚本都会完整地经历这些阶段,而FastCgi模式下则在启动时执行一次模块初始化。



1、php_module_startup() 模块初始化阶段

本阶段主要进行php框架、Zend引擎的初始化操作,比如启动zend引擎、解析php.ini、将php.ini中配置的扩展加载到php中,注册php.ini中禁用的函数、类:disable_functions、disable_classes,等。


2、php_request_startup() 请求初始化阶段

该阶段是在请求处理前每个请求都会经历的一个阶段,对于Fpm而言,实在worker进程中accept一个请求并读取、解析完请求数据后的一个阶段。

主要完成以下几个操作:

激活输出:php_output_activate()。

初始化编译器、执行器、重置垃圾回收器、初始化全局变量符号表。


3、php_execute_script() 执行脚本阶段

该阶段包括php代码的编译、执行两个核心阶段,这也是Zend引擎最重要的功能。在编译阶段,php脚本将经历从php源码到抽象语法树再到opline指令的转化过程,最终生成的opline指令就是Zend引擎可以识别的执行指令,这些指令接着被执行器执行,这就是php代码解释执行的过程。


4、php_request_shutdown() 请求关闭阶段

与请求初始化阶段相反,此阶段将flush输出内容、发送header头、清理全局变量、关闭编译器、关闭执行器等。


5、php_module_shutdown() 模块关闭阶段

进行资源清理、PHP各模块关闭、回调各扩展moduel shutdown钩子函数。处理函数是php_module_showdown()。