PHP运行模式(SAPI)

SAPI(Server Application Programming Interface)服务器应用程序编程接口,它提供了PHP与其他应用交互的接口。PHP脚本执行有很多方式:Web服务器/命令行下/嵌入在其他程序中等等。

PHP提供了一个常量PHP_SAPI和一个方法php_sapi_name()来判断当前PHP运行环境,以下是常见运行环境:

CLI

cli命令行接口, 在命令行下执行PHP脚本, 内置web服务器,如果请求未指定执行哪个PHP脚本,则默认执行目录下的index.php 或index.html,如果这两个文件都不存在则返回404

CGI

CGI 即通用网关接口(Commom Gateway Interface),它把网页和WEB服务器中的执行程序连接起来,把从HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI的跨平台性能极佳,几乎可以在任何操作系统上实现。

CGI方式在遇到连接请求先要创建CGI的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是CGI性能低下的主要原因。都会当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。

FastCGI

fast-cgi 是 CGI的升级版本,FastCGI可以看成是一个常驻型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI 进程管理器进行管理。

FastCGI的工作原理:

  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子进程关闭连接是,请求便告知处理完成。FastCGI子进程接着等待并处理来自FastCGI继承管理器的下一个连接。在CGI模式中,php-cgi在此便退出了。

CGI每个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重出始化全部数据结构。而使用FastCGI,所有这些都只在进程启动时发生一次。

Apache模块的DLL

该运行模式是我们以前在windows环境下使用apache服务器经常使用的,而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。

有用就打赏一下作者吧!