源码家族
当前位置:首页 > 资讯中心

资讯中心

【 php 有哪些 SAPI 】

发布时间: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。



上一篇:Go语言闭包Closure一个引用了外部变量的匿名函数
下一篇:MySQL事务与锁详解