php可分为四个层次
1.application php文件代码部分
2.sapi 与php进行交互的接口 请求的入口 入cgi fastcgi cli
3.extend php扩展层由zend 提供api与底层交互
4.zend php 的核心层提供交互接口编译php代码为opcode 最后执行代码

php代码开始会经过sapi接口,然后是
.模块初始化
.请求初始化
.请求结束,
.模块关闭
cli是每次都会经历这几个阶段,
而fpm会在一开始启动的时候就经历模块初始化,以后每个请求进来都不会再初始化,只会经历请求开始,请求结束,这也是为什么每次修改php.ini,都要重启fpm,因为它就是在模块初始化的时候就加载进去了,模块初始化就是进行sapi接口激活,php的一些模块初始化,zendvm的初始化,启动,内存池(php自己实现了一套内存管理器)解析php.ini加载扩展等。
而请求开始则是处理上面所说的fpm处理请求,在这个阶段也会经过一些初始化,比如垃圾回收机制的清空,编译器的开启等,php会在初始化完成后,开始调用zend引擎对php代码进行词法解析,语法分析编译城opcode,再根据具体的opline指令去执行opcode。请求结束阶段在php代码解析执行完成后开始就刷出缓冲区,设置http头,清空全局变量,关闭编译器等操作。

最后修改:2020 年 09 月 16 日 12 : 09 PM
如果觉得我的文章对你有用,请随意赞赏