PHP一共分为五大运行模式:
- CLI 模式(Command Line Interface)
- CGI 模式(Common Gateway Interface)
- FastCGI 模式
- Web模块模式(Apache等Web服务器运行的模式)
- ISAPI(Internet Server Application Program Interface)
备注:在 PHP5.3 以后,PHP 不再有 ISAPI 模式
1. CLI 模式(Command Line Interface)
工作原理
- PHP 作为命令行工具运行,无需 Web 服务器。
- 用户通过命令行直接调用 PHP 解释器执行脚本。
- 环境变量如
$_SERVER
不可用,但支持通过$argv
和$argc
传递参数。
优点
- 无需 Web 环境,运行简单。
- 适合批处理和自动化任务,执行效率高。
- 脚本可独立运行,易于调试和部署。
缺点
- 不支持 HTTP 请求处理。
- 需手动配置脚本触发机制(如定时任务)。
- 开发者需要熟悉命令行操作。
应用场景
- 定时任务(如配合
crontab
执行)。 - 后台数据处理(如大批量导入/导出)。
- 一次性任务或脚本调试(如数据库清理脚本)。
2. CGI 模式(Common Gateway Interface)
工作原理
- 每个 HTTP 请求都会启动一个独立的 PHP 进程,处理请求并返回结果。
- Web 服务器通过环境变量传递请求数据,PHP 脚本通过标准输入输出完成数据交换。
优点
- 与 Web 服务器解耦,适配性强,适用于各种服务器。
- 部署简单,易于理解。
缺点
- 每次请求都需启动新的进程,性能较差。
- 并发处理能力低,资源开销大。
- 已逐渐被 FastCGI 替代。
应用场景
- 早期小型动态网站。
- 特殊场景下需要使用 CGI 的遗留系统。
3. FastCGI 模式
工作原理
- 通过常驻进程池(如 PHP-FPM)处理 HTTP 请求,避免每次启动新进程。
- Web 服务器(如 Nginx 或 Apache)通过 FastCGI 协议与 PHP 进程通信,处理结果通过 Web 服务器返回用户。
优点
- 性能高,支持并发,适用于高流量场景。
- 资源利用率高,可通过配置优化进程池。
- 与 Web 服务器解耦,支持多种服务器(如 Nginx、Apache)。
缺点
- 配置较复杂(需要 PHP-FPM 等工具)。
- 占用内存较多(用于常驻进程池)。
- 调试复杂度高于 CLI 和模块模式。
应用场景
- 高并发网站(如电商、门户网站)。
- API 服务、微服务架构。
- 常见架构:Nginx + PHP-FPM。
4. Web模块模式(Apache 模块模式,如 mod_php)
工作原理
- PHP 作为 Web 服务器(如 Apache)的模块嵌入运行。
- Web 服务器线程直接调用 PHP 模块解析脚本,完成请求处理。
优点
- 配置简单,与 Apache 深度集成。
- 性能优于 CGI,无需每次启动新进程。
- 对小型项目友好,部署成本低。
缺点
- 与 Web 服务器强耦合,灵活性差。
- 占用资源较多,不适合高并发。
- 部署扩展性不如 FastCGI。
应用场景
- 小型或中型网站。
- Apache 为主的传统架构。
- 开发环境快速部署。
5. ISAPI 模式(Internet Server Application Program Interface)
工作原理
- PHP 被实现为 ISAPI 扩展(动态链接库),直接嵌入 Windows IIS 服务器。
- IIS 接收请求后调用 PHP 的 ISAPI 接口完成脚本处理,结果返回给 IIS。
优点
- 高性能,与 IIS 紧密集成。
- 请求无需启动额外进程,资源利用率高。
- Windows 平台运行友好。
缺点
- 仅适用于 Windows 和 IIS,平台限制较大。
- 开发和调试复杂,可移植性差。
- 随 FastCGI 的普及逐渐被替代。
应用场景
- 以 IIS 为基础的 Web 应用。
- Windows 企业内部系统。
- 特定的遗留 PHP 应用程序。
总结对比表
模式 | 工作原理 | 优点 | 缺点 | 应用场景 |
---|---|---|---|---|
CLI | 命令行调用 PHP 解释器 | 高效、无需 Web 服务器支持 | 无法处理 HTTP 请求 | 定时任务、后台数据处理、脚本调试 |
CGI | 每请求启动独立 PHP 进程 | 简单,与服务器解耦 | 性能低,资源开销大 | 小型动态网站、遗留系统 |
FastCGI | 使用常驻进程池处理 HTTP 请求 | 性能高,支持并发,灵活性好 | 配置复杂,占用内存 | 高并发网站、API 服务、微服务架构 |
模块模式 | PHP 嵌入 Web 服务器的线程 | 配置简单,部署方便 | 耦合性强,资源占用较高 | 小型网站,传统 Apache 架构 |
ISAPI | IIS 调用 PHP 的 ISAPI 接口(DLL) | 高效,与 IIS 集成度高 | 平台限制大,移植性差 | IIS 系统、Windows 环境的遗留应用 |