PHP的构成和生命周期

PHP的源码构成

  • SAPI(PHP的应用接口层)
  • main(主要代码,输入/输出,web通信以及PHP框架的初始化操作等)
  • ZendVM(PHP解析器的主要实现,代码的解释和执行,核心部分)
  • Extension(可分为PHP和Zend扩展)

生命周期

  • 模块初始化(PHP框架,Zend引擎的初始化操作)
  • 请求初始化(对于FPM而言,是在worker进程accept一个请求并读取/解析完请求数据后的一个阶段)
  • 执行脚本阶段(PHP代码的编译、执行,PHP脚本经历从源代码到抽象语法树再到opline指令,opline指令也就是Zend引擎可识别的执行指令)
  • 请求关闭阶段(flush输出内容,发送HTTP应答header头,清理全局变量、关闭编译器、关闭执行器等,resgister_shutdown_function也是在此执行)
  • 模块关闭阶段(SAPI关闭时执行)

根据不同SAPI的实现,会有一些差别。比如命令行模式,每执行一次脚本都要经历这五个阶段;而FastCGI模式下,只在启动时执行一次模块初始化,然后请求只经历请求初始化,执行脚本和请求关闭几个阶段。