PHP生命周期

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

本文标题:《PHP生命周期》

本文地址: http://blog.chenishr.com/?p=774

©版权所有,除非注明, 永在路上文章均为原创,转载请以链接形式注明出处和作者细信息。

发表评论

电子邮件地址不会被公开。 必填项已用*标注