Windows + Apache 环境下,PHP 有三种运行方式:模块模式 (mod_php)、CGI 模式、FastCGI 模式。本文以 PHP 5.x + Apache 2.2 为例,图文演示完整配置流程。
C:/PHP5/。php.ini-development 为 php.ini。error_reporting = E_ALL
display_errors = On
extension_dir = "C:/php5/ext"
date.timezone = Asia/Shanghai
# 加载 PHP 模块 (线程安全版 TS)
LoadModule php5_module "C:/php5/php5apache2_2.dll"
PHPIniDir "C:/php5/php.ini"
# 识别 .php 文件
AddType application/x-httpd-php .php
# 目录索引添加 index.php
DirectoryIndex index.html index.php
htdocs 下新建 index.php:<?php phpinfo(); ?>,访问 https://localhost/,看到 Server API: Apache 2.0 Handler 即成功。
cgi.force_redirect = 0
# 移除模块模式配置
# LoadModule php5_module ...
# PHPIniDir ...
# 启用 CGI 处理
AddHandler cgi-script .cgi
ScriptAlias /cgi-bin/ "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/"
# 在 cgi-bin 目录放入 test.cgi
#!C:/php5/php-cgi.exe
<?php phpinfo(); ?>
访问 https://localhost/cgi-bin/test.cgi,看到 Server API: CGI/FastCGI,任务管理器出现短暂 php-cgi.exe 进程,请求结束即消失。
fork-exec 新进程,开销巨大,高并发不可用。mod_fcgid.so (Apache 2.2 对应版本),放入 modules/。LoadModule fcgid_module modules/mod_fcgid.so
# PHP 解释器路径与配置
FcgidInitialEnv PHPRC "C:/php5"
FcgidWrapper "C:/php5/php-cgi.exe" .php
# 处理 .php 文件
AddHandler fcgid-script .php
# 允许执行 CGI 脚本
<Directory "C:/php5">
Options ExecCGI
Require all granted
</Directory>
访问 https://localhost/index.php,Server API: CGI/FastCGI。任务管理器常驻多个 php-cgi.exe 进程 (由 Fcgid 管理器池化),不随请求销毁。
| 维度 | 模块模式 | CGI 模式 | FastCGI 模式 |
|---|---|---|---|
| 进程模型 | Apache 内部线程 | 每请求新进程 | 持久进程池 |
| 性能 | 高 | 极低 | 高 |
| 隔离性 | 无 (PHP 崩溃挂 Apache) | 完全 | 完全 |
| 配置复杂度 | 低 | 中 | 中 |
| 推荐场景 | 开发调试、低并发 | 不推荐 | 生产环境标准 |
| PHP 版本要求 | TS (Thread Safe) | NTS/TS 均可 | NTS (Non Thread Safe) |
Windows 生产环境已极少见。推荐:
php:8.2-fpm + nginx:alpine,一致性部署。理解三种模式原理有助于排查历史遗留系统问题。新项目请直接拥抱 Linux + PHP-FPM + Nginx 架构,享受成熟生态与最佳性能。