生命周期
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模式下,只在启动时执行一次模块初始化,然后请求只经历请求初始化,执行脚本和请求关闭几个阶段。
参考
关注和赞赏都是对小欧莫大的支持! 🤝 🤝 🤝