什么是 PHP SAPI?
PHP脚本要执行有很多种方式,比如:通过Web服务器、直接在命令行下、嵌入在其他程序中。
SAPI
(Server Application Programming Interface
)提供了一个和外部通信的接口,常见的SAPI
有:
cgi
fast-cgi
cli
isapi
apache
模块的DLL
因此,PHP SAPI
即是:php与其他应用通信的接口。
CGI
通用网关接口(
Common Gateway Interface
)
作用:
连接网页和web服务器的执行程序。它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。
工作原理:
工作模式:fork-and-execute
1、用户请求创建cgi子进程
2、激活一个cgi进程
3、处理请求
4、结束该子进程
每次请求都会fork
,因此请求数等于子进程数。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。请求数量变大时,会导致性能低下。因此出现了FastCGI
FastCGI
cgi
的升级版。只要进程激活后,会一直执行着,而不会每次去fork
。PHP使用PHP-FPM
(FastCGI Process Manager
)进程管理器对其进行管理。
工作原理:
1、web Server启动时载入FastCGI
进程管理器
2、FastCGI
进程管理器自身初始化,启动多个CGI
解释器进程(可见多个php-cgi
)并等待来自Web Server的连接
3、当客户端请求到达Web Server时,FastCGI
进程管理器选择并连接到一个CGI
解释器。 Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi
4、FastCGI
子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。
5、FastCGI
子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式
中,php-cgi在此便退出了
cli
cli
是php的命令行运行模式
ISAPI
ISAPI
(Internet Server Application ProgramInterface
),是微软提供的一套面向Internet
服务的API接口。
一个ISAPI
的DLL
,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。
apache模块的DLL
是
apache
在CGI
的基础上进行的一种扩展,加快PHP的运行效率
该运行模式是在windows
环境下使用apache
服务器经常使用的,而在模块化(DLL
)中,PHP是与Web服务器一起启动并运行的。