PHP 运行模式大多分为两种 Web 模式、Cli 模式。无论哪种模式,PHP 生命周期都是一样的,作为一种 SAPI 运行。
SAPI(Server Application Programming Interfac) 服务端应用编程接口,SAPI 通过一系列钩子函数,使 PHP 和其他应用解耦分离,交换处理数据,这是 PHP 非常优雅的设计,这个设计的优点是不用考虑 PHP,和其他应用之间的兼容问题。
- 单进程 PHP 生命周期
- MINIT(module init 模块初始化)
- 启动 PHP 输出、初始化垃圾回收器
- 启动 Zend 引擎、注册 Zend 核心扩展、Zend 标准常量
- 解析 PHP.ini,映射 PHP.ini 相关配置
- 注册静态、动态编译的扩展
- 回调各扩展定义的 module starup 钩子函数
用一句话来说,就是初始化类、常量、扩展等 PHP 所用到的资源
- RINIT(request init 请求初始化)
PHP 初始化脚本执行的基本环境,SAPI 将控制权交给 PHP,激活 Zend 引擎,初始化执行器
- PHP 脚本执行
Zend 引擎接管控制权,将 PHP 脚本编译成 Opcodes,并顺序执行
- RSHUTDOWN (request shutdown 请求结束)
PHP 脚本执行完之后进入请求结束阶段,PHP 启动清理程序,这个阶段,将 flush 输出内容,发送 http 响应内容,关闭 PHP 执行器
- MSHUTDOWN(module shutdown 模块关闭)
这个阶段主要是进行资源的清理、php 各模块的关闭操作,同时,将回调各扩展的 module shutdown 钩子函数