PHP7内核-PHP生命周期
1.2 PHP的构成
源码下有几个主要的目录:SAPI、main、Zend、ext。
具体过程是:浏览器<--->SAPI<--->main<--->Zend,Zend在解析的过程中会加载ext扩展
●SAPI是PHP的应用接口层,为了适配不同的应用环境,是整个PHP框架最外层的一部分。最常用的SAPI是Cli与Fpm;
●main为PHP的主要代码,主要是输入/输出、web通信,以及PHP框架的初始化操作等,如fastcgi协议的解析(CGI全称是“通用网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序一般运行在网络服务器上)、扩展的加载、PHP配置解析等工作,位于ZendVM的上一层;
●Zend目录是PHP解析器的主要实现,即ZendVM; PHP的代码解析、执行就是靠Zend完成;包括编译器与执行器,将PHP的代码解析为执行器可识别的指令,等价于Java的JVM,都是抽象出来的虚拟计算机,与C/C++不同的是,虚拟机运行的指令不是机器指令。虚拟机的优势是可以跨平台,只需要按照不同平台编译出对应的解析器就能实现代码的跨平台执行;
●ext是PHP的扩展目录,PHP中很多操作函数都是通过扩展提供的。通过扩展,我们可以用C/C++实现更强大的功能与性能。扩展分为PHP扩展与Zend扩展,Opcache是Zend扩展;
●TSRM是线程安全相关实现。
PHP生命周期被划分为:模块初始化阶段(module startup)、请求初始化阶段(request startup)、执行脚本阶段(execute script)、请求关闭阶段(request shutdown)、模块关闭阶段(module shutdown)。
1.3 生命周期
1、模块初始化阶段
这个阶段主要进行PHP框架、Zend框架的初始化操作。此函数定义在main.c中。
2、请求初始化阶段
该阶段在请求处理前每一个请求都会经历的一个阶段,对于fpm而言,是在worker进程accept一个请求且读取、解析完请求数据后的一个阶段。php_request_startup主要过程如图:
3、执行脚本阶段
该阶段包括PHP代码的编译、执行两个核心阶段。具体过程如图:
4、请求关闭阶段
PHP解析执行后进入请求关闭阶段,这个阶段将flush输出内容、发送HTTP应答头、清理全局变量、关闭编译器与执行器等。在该阶段回调各扩展的request shutdown钩子函数。该阶段是请求初始化的相反操作。
5、模块关闭阶段
该阶段在SAPI关闭时执行,与模块初始化阶段对应,这个阶段主要进行资源的清理、PHP各模块的关闭,同时,回调各扩展的module shutdown钩子函数。具体操作函数为php_module_shutdown()。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构