9

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

  • 模块初始化阶段

    • 激活SAPI
    • 启动PHP输出
    • 初始化垃圾回收器
    • 启动Zend引擎

      • 启动内存池
      • 设置一些util函数句柄
      • 设置Zend虚拟机编译、执行器的函数句柄
      • 分配函数符号表、类符号表、常量符号表
    • 注册Zend核心扩展
    • 注册Zend定义的标准常量
    • 注册$GLOBALS超全局变量的获取handler
    • 分配php.ini配置的存储符号表
    • 注册PHP定义的常量
    • 解析php.ini
    • 映射PHP、Zend核心的php.ini配置
    • 注册用于获取 $_GET$_POST$_COOKIE$_SERVER$_ENV$_REQUEST$_FILES 变量的 handler
    • 注册静态编译的扩展
    • 注册动态加载的扩展
    • 回调各扩展定义的module starup钩子函数
    • 注册php.ini中禁用的函数、类
  • 请求初始化阶段

    • 激活输出
    • 激活Zend引擎

      • 重置垃圾回收器
      • 初始化编译器
      • 初始化执行器
      • 初始化词法扫描器
    • 激活SAPI
    • 回调各扩展定义的request startup钩子函数
  • 执行脚本阶段

    • 编译阶段

      • PHP 源代码
      • 抽象语法树
      • opline指令
    • 执行阶段
  • 请求关闭阶段

    • flush输出内容
    • 发送HTTP应答header头
    • 清理全局变量
    • 关闭编译器
    • 关闭执行器
  • 模块关闭阶段

    • 进行资源的清理
    • PHP各模块的关闭操作
    • 回调各扩展的module shutdown钩子函数

image


chenishr
238 声望11 粉丝

淡泊以明志,宁静以致远