2026-04-01 05:04:59
大家好,今天小编关注到一个比较有意思的话题,就是关于php生命周期的问题,于是小编就整理了1个相关介绍php生命周期的解答,让我们一起看看吧。
PHP的执行分三个阶段:

处理请求的开始阶段、处理请求阶段、请求之后的结束阶段。
处理请求的开始阶段:
1 模块初始化阶段(MINIT),在整个SAPI生命周期内(例如Apache启动以后的整个生命周期内或者命令行程序整个执行过程中),该过程只进行一次。(这应该就是为何修改了php.ini之后,要重启Apache的原因);
PHP_MINIT_FUNCTION(extension_name){
/* Initialize functions, classes etc */
}
2 请求初始化阶段(RINIT),该过程发生在请求阶段, 例如通过url请求某个页面,则在每次请求之前都会进行模块激活。(为何不先激活呢?因为方便模块在RINIT阶段针对各种请求设置环境变量或其他的操作);
PHP_RINIT_FUNCTION(extension_name) {
/* Initialize session variables, pre-populate variables, redefine global variables etc */
}
处理请求阶段:
1 词法分析:将php文件翻译成一个个的token;
2 语法分析:根据生成的token和语法规则进行分析;
3 Zend引擎:将代码编译为opcode后并执行,在执行的过程中还会重复进行编译-执行,例如执行了include语句 (为何不在第一次编译就把这些包含进来的文件也一起编译好?);
4 调用SAPI的输出函数返回执行结果。
处理请求的结束阶段:
1 关闭请求:RSHUTDOWN对应于RINIT,释放资源等操作
2 关闭模块:MSHUTDOWN对应于MINIT,SAPI生命周期结束(Web服务器退出或者命令行脚本执行完毕退出)
PHP_RSHUTDOWN_FUNCTION(extension_name) {
/* Do memory management, unset all variables used in the last PHP call etc */
}
PHP_MSHUTDOWN_FUNCTION(extension_name) {
/* Free handlers and persistent memory etc */
}
模块加载,模块初始化,执行php,模块停止,模块卸载,加载模块会根据具体的sapi环境,比如是cli,phpcgi还是嵌入式脚本等,运行php包含词法分析,语法分析,执行php(zend虚拟机解释执行),再就是在多线程多进程还有是否采用fastcgi,他的运行模式会有些差别,具体找些资料看看吧,
到此,以上就是小编对于php生命周期的问题就介绍到这了,希望介绍关于php生命周期的1点解答对大家有用。
下一篇:没有了
Copyright © 2005-2026 代潇瑞博客 www.daixiaorui.com All Rights Reserved.
免责声明: 1、本站部分内容系互联网收集或编辑转载,并不代表本网赞同其观点和对其真实性负责。 2、本页面内容里面包含的图片、视频、音频等文件均为外部引用,本站一律不提供存储。 3、如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间删除或断开链接! 4、本站如遇以版权恶意诈骗,我们必奉陪到底,抵制恶意行为。 ※ 有关作品版权事宜请联系客服邮箱:478923*qq.com(*换成@)
渝ICP备2023009091号-21