PS : SAPI:php所提供与其他程序的接口。
先说说sapi 这是应用层与核心层的桥梁,用翻译的方式来做个比较恰当的比喻吧。
这是一个中国人 名字叫Code
这是叫做php-cli的英语翻译,擅长体育翻译这是个叫做php-cgi的翻译,擅长画作方面的翻译.......
这里有个叫做汇编的美国人
解释一下这个意思吧,中国人扮演的角色就是你写的代码,而各个领域的翻译就相当于与实现了sapi的中间件,他讲中文翻译成英文,就是将代码转换成底层程序能理解的汇编码,然后这个美国人再将他的想法告诉翻译由翻译告诉中国人code ,这个过程相当于 程序运行出结果了,底层通过sapi 报告给中间层,中间层通过各自约定的数据展现方式来展示数据,例如 cli可以echo 在终端里,cgi可以写入缓冲等等。
PHP的生命周期大概分为以下几个阶段:
Modele init
模块初始化 : 在这个阶段,各个编译的模块(例如 gd)会将自己的初始化(__construct)操作写入php初始化进程。例如 ngnix或者apache启动时会启动他们各自的PHP初始化操作。也就是实现了各自的sapi。
Request init
请求初始化:当请求到达时,php初始化脚本环境,这其中包括一些创建运行变量,变量值内容的符号表。
Execute
代码执行阶段:在这个时候会执行我们自己编写的php 代码。
RSHUTDOWN
请求关闭阶段:回收初始化时候创建的环境变量。回收执行阶段实例化的类和数据。
MSHUDOWN
sapi注销阶段 : 在这个时候通常都是 sapi 注销时完成的操作,比如ngnix 注销的时候会将一些持久化的资源 保存在log 文件当中