PHP 运行模式

PHP 主要有四种运行模式

  1. CGI 模式
  2. FastCGI 模式
  3. CLI 模式
  4. Module 模式

CGI 模式

CGI 的全称为 Common Gateway Interface,即通用网关接口。它是一种描述 Web 服务器与应用处理程序之间传输数据格式的协议。

作为 PHP 的一种运行模式,它是比较陈旧的,现在几乎不再使用。每有一个用户请求,都会创建一个子进程,然后处理请求,处理完后结束这个子进程。(也称为 Fork-And-Execute 模式)

根据原理可以看出,这种模式无法处理高并发的场景。同一时间,用户请求增多,会产生大量子进程,导致服务器资源紧张,直到崩溃。

FastCGI 模式

是 CGI 模式的升级版,它不会每个请求都 Fork 一个子进程,而是创建一个或多个常驻的子进程。这些子进程在处理完一个请求后,不会结束掉自己,而是等待或者处理后续的请求。因此也叫常驻型 CGI。这可以显著降低进程创建与进程销毁所耗的资源,以及 CGI 子进程启动后初始化的时间。

PHP-FPM(PHP-FastCGI Process Manager)是 PHP 语言中实现了 FastCGI 协议的进程管理器,它随 PHP 源码一起编译、安装。

通常 Nginx 使用这种模式运行 PHP。

CLI 模式

CLI 的全称为 Command Line Interface,即命令行接口。PHP 默认会安装,通过 php -v 命令可以看到 cli 字样。

php -r <code> 运行 PHP 代码,不需要加开始与结束标记(<? 和 ?>)
php -f <file> 运行 PHP 文件。其中参数 -f 可以省略,即 php 命令后直接输入文件名。

Module 模式

是将 mod_php5 模块集成到 Web Server 软件中,来运行 PHP。

通常 Apache 使用这种模式运行 PHP。需要在 httpd.conf 中配置:

LoadModule php5_module modules/mod_php5.so

当请求 .php 文件时,Apache 就会调用 php5_module 来解析 PHP 脚本。

附加知识

PHP 的运行模式,也可以称为 SAPI,全称为 Server Application Programming Interface, 即服务端应用编程接口。SAPI 为 PHP 提供了一个和外部通信的接口。PHP 通过 SAPI 与其它程序进行数据交换。针对不同的应用场景,PHP 提供了多种不同的 SAPI,如 apache、apache2filter、apache2handler、cli、cgi、embed 、fast-cgi、isapi 等等。

可通过 php_sapi_name() 函数获取 Web 服务器与 PHP 之间的接口类型,也可通过常量 PHP_SAPI 获取,它们返回相同的值。

还可以在 phpinfo() 中查看到使用了哪种 Server API。

标签: php

评论已关闭