CGI

CGI(Common Gateway Interface) 代表“通用网关接口”。  它是一个标准协议,定义 Web 服务器如何与外部应用程序或脚本交互以处理 HTTP 请求并生成动态 Web 内容。  在 PHP、Python 和 Ruby 等服务器端脚本语言出现之前,CGI 是最早用于动态网页生成的方法之一
当客户端(通常是 Web 浏览器)向 Web 服务器发送 HTTP 请求时,服务器会处理该请求,并且在静态内容(如 HTML 和图像)的情况下,直接提供所请求的文件。  然而,当请求的内容是动态的并且需要即时生成时,服务器可以使用CGI与外部程序通信来进行处理。
以下是 CGI 工作原理的基本概述:

  1. 1. 客户端向 Web 服务器发送 HTTP 请求。

  2. 2. Web服务器接收请求并识别出请求的内容需要动态处理。

  3. 3. Web 服务器将请求连同请求中的必要环境变量和数据(例如,查询参数、表单数据等)一起传递给 CGI 程序或脚本。

  4. 4. CGI 程序处理请求并生成动态内容,通常采用 HTML 形式。

  5. 5. CGI程序将生成的内容发送回Web服务器。

  6. 6. Web 服务器将 HTTP 响应中的动态内容返回给客户端,客户端将其呈现在 Web 浏览器中。

CGI 程序可以用各种编程语言编写,例如 Perl、Python、Ruby、C、C++ 等。它们作为与 Web 服务器分开的进程执行,这意味着对 CGI 程序的每个请求都会产生启动新进程的开销
虽然 CGI 在当时具有革命性意义并支持动态 Web 内容,但它也有一定的局限性,包括性能开销和可扩展性问题。  因此,现代 Web 开发已在很大程度上摆脱了 CGI,转而采用更高效、可扩展的服务器端脚本技术,例如 PHP、Node.js 和各种应用程序框架。
如今,CGI 主要用于需要与遗留系统或专用环境兼容的特定情况。  对于通用 Web 开发,首选更高效的替代方案。

FastCGI

FastCGI 是通用网关接口 (CGI) 的变体,它解决了传统 CGI 的性能和可扩展性限制。  它是一种协议,允许 Web 服务器与外部应用程序进程高效通信,从而为 Web 应用程序生成动态内容。
使用传统的 CGI,每个请求都会生成一个新进程,从而导致显着的性能开销。  FastCGI 通过引入持久应用程序进程池对此进行了改进,即使在处理请求后该进程池仍保持活动状态。  该进程池无需为每个传入请求启动新进程,从而减少了开销并提供更好的性能和资源利用率。
FastCGI 的工作原理如下:

  1. 1. 客户端向 Web 服务器发送 HTTP 请求。

  2. 2. Web 服务器通过套接字或 TCP/IP 连接将请求以及必要的环境变量和请求数据传递给 FastCGI 应用程序。

  3. 3. FastCGI 应用程序处理请求并生成动态内容(例如,HTML、JSON 等)。

  4. 4. FastCGI 进程并没有终止应用程序进程,而是保持活动状态并等待下一个请求。

  5. 5. Web 服务器接收来自 FastCGI 应用程序的响应,并在 HTTP 响应中将其发送回客户端。

FastCGI 与传统 CGI 相比具有以下几个优点:

  1. 1. 减少开销:通过重用应用程序进程,FastCGI 消除了为每个请求创建和终止进程的开销。

  2. 2. 改进的性能:持久进程池可以加快后续请求的响应时间,因为应用程序不需要为每个新请求重新加载。

  3. 3. 资源效率:与为每个请求生成新进程相比,持久进程池消耗的资源更少。

  4. 4. 可扩展性:FastCGI允许Web服务器处理更高数量的并发请求,提高Web应用程序的可扩展性。

FastCGI 广泛用于 Web 服务器配置中,以有效处理动态内容生成。  Nginx 和 Apache 等流行的 Web 服务器支持 FastCGI,使其成为托管用 PHP、Python、Ruby 等语言编写的动态 Web 应用程序的标准选择。
总而言之,FastCGI 是 CGI 的扩展,通过采用持久的应用程序进程池来处理传入请求,显着提高了 Web 应用程序的性能和资源利用率。

PHP-FPM

图片


PHP-FPM(FastCGI Process Manager)是 PHP-FPM 的另一种 PHP FastCGI 实现,广泛用于高效、安全地为 PHP 应用程序提供服务。  它与 Web 服务器(例如 Nginx 或 Apache)结合使用,通过 FastCGI 协议处理 PHP 请求
与传统 PHP CGI 或 mod_php(Apache PHP 模块)相比,PHP-FPM 提供了多项优势:

  1. 1. FastCGI进程管理:PHP-FPM使用进程管理器来控制PHP子进程。  这些子进程处理传入的 PHP 请求,PHP-FPM 根据配置设置管理它们。  进程管理器可以更好地控制进程生成、终止和资源管理,从而提高性能并减少资源使用。

  2. 2. 资源池:PHP-FPM 维护一个工作进程池,这些进程保持活动状态并准备好处理传入请求。  这避免了为每个请求启动和停止 PHP 进程的开销,使 PHP-FPM 比传统 CGI 更高效、更快。

  3. 3. 隔离和安全性:PHP-FPM 在单独的隔离进程中运行 PHP 请求,通过将各个 PHP 请求相互隔离来增强安全性。  这种隔离可以防止不同 PHP 请求之间潜在的数据共享,并提高 PHP 应用程序的整体安全性。

  4. 4. 可定制的配置:PHP-FPM允许用户定制流程管理器的行为和配置,以匹配服务器的资源和要求。  这使用户能够微调 PHP-FPM 以获得最佳性能和稳定性。

  5. 5. 扩展:PHP-FPM 的进程管理通过调整 PHP 工作进程的数量来处理增加的流量和工作负载,可以更轻松地水平扩展 PHP 应用程序。

PHP-FPM 是在现代 Web 服务器配置中为 PHP 应用程序提供服务的推荐方法。  它通常与 Nginx 一起使用,但也可以与 Apache 或其他支持 FastCGI 的 Web 服务器一起使用。
要使用 PHP-FPM,您通常需要将其与 Web 服务器分开安装,并将其配置为与您选择的 Web 服务器一起使用。  配置过程根据您使用的操作系统和 Web 服务器而有所不同,但大多数 PHP 安装都自带了 PHP-FPM 。
总体而言,PHP-FPM 是 PHP 应用程序部署的宝贵工具,可为 PHP 驱动的 Web 应用程序提供改进的性能、安全性和可扩展性。

总而言之,CGI 是执行服务器端脚本最简单、最古老的方法,但性能开销较大。  FastCGI 通过引入持久进程池对 CGI 进行了改进,从而获得了更好的性能。  另一方面,PHP-FPM 是为 PHP 执行量身定制的特定 FastCGI 实现,为 PHP 应用程序提供卓越的性能、可扩展性和安全性。  对于现代 PHP 应用程序,PHP-FPM 是处理动态内容的推荐方法。

PHP-Cli

PHP 的命令行界面(Command Line Interface)首次出现在 PHP 4.2.0 中,作为实验性功能。在 PHP 4.3.0 中,CLI 成为正式的 SAPI(服务器 API)。实际上,这意味着 PHP 的 CLI 版本现在作为单独的 PHP 二进制文件(可执行文件)提供,您可以使用它在命令行上运行脚本,并为世界其他地方提供“访问点”,就像 $_GET 和 $_POST 变量让您可以通过 Web 访问传入数据。自PHP5.4之后 PHP开始内置了一个Web 服务器。通过 php -S 命令即可启动PHP自带的Web Server,后面跟网络地址及监听的端口号,默认的网站根目录为当前目录。访问
http://localhost:8080,通过php-cli,php直接接管了nginx或者apache的http服务工作,但cli内置的服务器功能比较弱的。一般都是建议开发环境使用而已。,而在swoole框架中,php-cli称成为了其唯一运行环境。**并且swoole增强了其作为服务器的功能**。有点想springboot集成了tomcat 的意思。使用swoole可以直接开发各种服务器。
cli环境一般有以下优点

  • • 不依赖于Web服务器,可以在不使用Web服务器的情况下运行PHP脚本。

  • • 可以轻松地在命令行中运行PHP脚本,测试脚本时非常方便,例如在执行一些系统任务、批处理任务、计划任务、测试脚本等方面。