php 生命周期

 

php是以请求/响应为周期运行服务端应用程序,当请求进入应用程序,流程如下:

程序开始启动->服务端处理请求->产生响应,将请求的结果返回给响应的客户端->程序结束

php的运行模式有两种:web模式和cli模式。

无论是哪种公众模式,php的工作原理都是一样的,都是作为一种SAPI运行。

sapi成功的将PHP本身和上层应用解耦隔离

SAPI (Server Application Programme Interface) “服务器应用程序接口”,可以认为是服务器端的 API

常见的SAPI有cli、cgi、php-fpm以及各服务具体的sapi。

SAPI运行PHP都经过下面几个阶段:

1.MINT 2.RINT 3RSHUTDOWN 4.MSHUTDOWN

1.MINT :module init 模块初始化阶段。

在SAPI启动时执行一次,对于FPM而言,就是在fpm的master进行启动时执行的

激活sapi,初始化垃圾回收器,启动zend引擎,读取配置文件,引入扩展

php加载每个扩展的代码并调用其模块初始化例程(minit),申请模块所需要的变量,内存分配

2.RINT :request init 请求初始化阶段

当一个页面请求发生时,在请求处理前都会经历的一个阶段。

对于fpm而言,是在worker进程accept一个请求并读取,解析完请求数据后的一个阶段。

在这个阶段内,SAPI层将控制权交给php层,php初始化本次请求执行脚本所需的环境变量。

3.php脚本执行阶段
php代码解析执行的过程。Zend引擎接管控制权,将php脚本代码编译成opcodes并顺次执行

4.RSHUTDOWN 请求结束阶段(request shutdown):
请求处理完后就进入了结束阶段,PHP就会启动清理程序。

是在PHP脚本执行完毕之后将返回结果输出、发送HTTP应答header头阶段

这个阶段,将flush输出内容发送http响应内容等,然后它会按顺序调用各个模块的RSHUTDOWN方法。

RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。

5.MSHUTDOWN 模块关闭阶段(module shutdown):

模块初始化阶段的相反阶段,清理资源,关闭模块
该阶段在SAPI关闭时执行,与模块初始化阶段对应,这个阶段主要是进行资源的清理php各模块的关闭操作,同时,将回调各扩展的module shutdown钩子函数。这是发生在所有请求都已经结束之后,例如关闭fpm的操作。(这个是对于CGI和CLI等SAPI,没有“下一个请求”,所以SAPI立刻开始关闭。)

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值