🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
1. 模块初始化 主要是 PHP 框架、Zeed引擎初始化操作,这个阶段一般在 SAPI 启动时执行一次,对于 PHP-FPM 就是在 master 启动时执行。 - 激活 SAPI :sapi_activate(),初始化请求信息 SG(request_info)、设置读取 POST 请求的 handle 等,在 module_startup 阶段处理完成后将调用 sapi_acivate() - 启动 PHP 输出 - 初始化垃圾回收器,分配内存 - 启动 Zeed 引擎 - 注册 PHP 定义的常量 - 解析 php.ini,映射PHP,Zend核心的php.ini配置 - 注册静态、动态编译的扩展 - 回调各个扩展定义的 moudle_starup 钩子函数 - 注册 php.ini 中禁用的函数类 2. 请求初始化阶段 一个页面请求发生时,在请求处理前都会经历的一个阶段。对于 PHP-FPM 而言,是在 Worker 进程 accept 一个请求且读取、解析完数据后的阶段。在这个阶段,SAPI 层将控制权交给了 PHP层,PHP初始化本次请求执行脚本所需的环境变量。 - 激活 PHP 输出 - 激活 Zeed 引擎 - 重置垃圾回收器 - 初始化编译器 - 初始化执行器 - 初始化词法扫描器 - 激活 SAPI 3. 脚本执行阶段 PHP 代码解析执行过程,Zeed 引擎接管控制权,将php脚本代码编译成 opcodes 并顺次执行。 4. 请求关闭阶段 请求处理完成,PHP 启动清理程序。这个阶段,将 flush 输出内容、发送 http 响应内容等,然后它会按顺序调用各个模块的 RSHUTDOWN 方法。 RSHUTDOWN 用以清除程序运行时产生的符号表,也就是对每个变量调用 `unset `函数。 5. 模块关闭阶段 该阶段在 SAPI 关闭时执行,与模块初始化阶段对应,这个阶段主要进行资源的清理、PHP 各个模块的关闭操作,同时,将回调各个扩展的 module shutdown 钩子函数。具体的处理函数为 php\_module\_shutdown() 。