发布时间:2021-08-25 09:59:52 阅读次数:161
PHP的SAPI你都了解过那些?
php的SAPI就是指的php的运行模式,常见的运行模式有cli、cgi、fast-cgi
说的详细一点
cli
cli命令行接口, 在命令行下执行PHP脚本, 内置web服务器,如果请求未指定执行哪个PHP脚本,则默认执行目录下的index.php 或index.html,如果这两个文件都不存在则返回404
cgi
cgi全称通用网关接口(Commom Gateway Interface),它把网页和WEB服务器中的执行程序连接起来,把从HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。常见和apache配合使用。
fast-cgi
fast-cgi是cgi的升级版本,PHP使用PHP-FPM(FastCGI Process Manager)进行cgi管理。
区别
cgi
cgi方式在遇到连接请求先要创建cgi的子进程,激活一个cgi进程,然后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。都会当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。
fast-cgi
fast-cgi可以看作是一个cgi进程管理器,只要激活后,它可以一直执行着,不会每次都要花费时间去fork一次从而比cgi的方式有更大的吞吐能力。
cli
cli在命令行模式下可以直接通过内置web服务器启动的,不过一般都不会去这么用的,都是去跑指定php文件的,一般都是用于定时任务和实时消费消息队列的,不过就像近年来的swoole、workerman也是用cli模式运行的,得益于只用加载一次框架,持久化运行在内存中,所以比前两种方式都快不少.
PHP-FPM运行时都会有那些进程啊?
master 和 work 进程
如何工作的呢?
PHP-FPM监听端口9000,nginx匹配到php文件后会通过fast-cgi协议转发给PHP-FPM的master进程上,master进程会分配给work进程处理(每一个work进程都有一个php解释器),此时work进程会加载框架,匹配路由,最终返回结果给nginx。