道者编程

php生命周期

php生命周期,其实指的就是php执行的过程。要搞清楚这个问题,首先要明白php运行模式有哪些?

一:PHP的运行模式

总体分为种运行模式:

1:CLI模式:也就是命令行模式,比如 php a.php,执行定时脚本的时候就这样干。

2:WEB模式:或者叫FPM模式,通过web服务器和php交互,比如Nginx,Nginx是不能直接和php交互的,它是通过php-fpm来解析php文件。

php-fpm是什么?相当长的时间里,web服务器只能处理静态文件,而不能处理动态程序。于是人们搞了个叫 cgi 的玩意儿,就是为了解决web服务器和应用程序通信的问题,但这玩意儿很耗资源,来一个请求,就启动一个进程,有多少请求就有多少进程。于是后来改进了一下,有搞出了一个叫fast-cgi的玩意儿,一个进程可以处理多个请求,这效率就高了。这两个东西和语言无关,php,java,python等等都可以用。

这里php-fpm就出来了,其实就是给php用的 fast-cgi。php已经内置了这东西,更稳定、性能更好。你不再需要安装其他的fast-cgi。

二:五个生命周期

这个东西php官方有介绍,我们更形象的描述一下。

1:模块初始化阶段:php_module_startup()
启动Zend引擎
初始化垃圾回收器
注册PHP定义的常量:PHP_VERSION等
解析php.ini
注册扩展,包括静态编译的扩展和动态加载的扩展

2:请求初始化阶段:php_request_startup()
初始化编译器、执行器、重置垃圾回收器、初始化全局变量符号表。

3:脚本执行阶段:php_execute_script()
php的编译、解析、执行就在这里。

4:请求关闭阶段:php_request_showdown
这一步是给上面第2步擦屁股的,把上面的都关掉,此阶段将flush输出内容、发送header头、清理全局变量、关闭编译器、关闭执行器等。

5:模块关闭阶段:php_module_shutdown
这一步是给上面第1步擦屁股,清理资源。

1、2步对应3、4步。

现在回过头再看php的运行模式,是不是所有运行模式都是这5个生命周期。显然不是的,起码这样说是不准确的。

如果是cli模式,那么就是这5步,所以你改了php.ini,用cli模式是没问题的,不需要重启什么。

如果是web模式,改了php.ini,就需要重启fpm,为什么?因为php-fpm把第1步常驻内存了,第1步在fpm下只启动一次。第5步在fpm退出的时候,才会关闭。也就是说fpm启动后,只要不关闭,整个过程,除了1启动一次,剩下的其实就是 2、3、4循环。




最新评论:
1楼 中国 移动 发表于 2021-10-11 16:20:08
6666666
2楼 广东省 电信 发表于 2023-03-14 15:17:15
666
共有 2 条记录  首页 上一页 下一页 尾页 1
我要评论:

看不清楚