2026-04-01 05:04:59

大家好,今天小编关注到一个比较有意思的话题,就是关于php生命周期的问题,于是小编就整理了1个相关介绍php生命周期的解答,让我们一起看看吧。

php执行的生命周期是怎样的?

PHP的执行分三个阶段:

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点解答对大家有用。

上一篇:php代码解密,php代码解密工具

下一篇:没有了

相关阅读