必须用php-cgi.exe而非php.exe,因后者为cli模式、不支持cgi协议;fastcgi模式下需严格配置fastcgi.impersonate=1、cgi.fix_pathinfo=1、cgi.force_redirect=0三项,且iis须启用cgi功能并设应用程序池为32位兼容。

Windows 7 下用 IIS 搭 PHP,必须走 php-cgi.exe 这条路——PHP 5.3 起就彻底废弃了 ISAPI 支持,php5isapi.dll 在新版里根本不存在。直接配 FastCGI 是唯一可行路径,否则你会卡在“HTTP 错误 500.0 - Internal Server Error”或“FastCGI 进程意外退出”上。
为什么必须用 php-cgi.exe 而不是 php.exe
php.exe 是 CLI(命令行)模式解释器,不支持 CGI 协议;php-cgi.exe 才是专为 Web 服务器设计的 CGI 兼容可执行文件。IIS 的 FastCGI 模块只认后者,调用前者会立即崩溃并报错 FastCGI process exited unexpectedly。
- 检查方法:在 CMD 中运行
c:\php\php-cgi.exe -v,能输出版本即说明文件可用;若提示“不是有效的 Win32 应用程序”,大概率是架构不匹配(如 x64 PHP 装在 x86 系统上) - VC 运行库必须匹配:PHP 7.x 依赖
vc14或vc15,PHP 5.6 多用vc11;未安装对应Microsoft Visual C++ Redistributable会导致php-cgi.exe启动失败且无明确错误提示 - IIS 应用程序池“启用 32 位应用程序”必须设为
True(即使系统是 64 位),因为绝大多数 Windows PHP 二进制包仍是 32 位编译
php.ini 关键项不能漏掉的三处修改
仅改 extension_dir 和开扩展远远不够。FastCGI 模式下,以下三项缺一不可,否则请求直接 500:
-
fastcgi.impersonate = 1:让 PHP 进程以当前请求用户身份运行(比如 IUSR),否则文件读写权限出问题 -
cgi.fix_pathinfo = 1:修复 PATH_INFO 解析,否则index.php/abc类路由会 404 -
cgi.force_redirect = 0:IIS 已经做了安全重定向,再开这项会导致循环或拒绝服务
注意:所有这些配置前面的分号 ; 必须删掉,否则等同于未设置;date.timezone 建议也配上,否则 strtotime() 等函数行为不可靠。
处理程序映射中路径和模块名要严格匹配
在 IIS 管理器 → “处理程序映射” → “添加模块映射” 时,以下字段必须一字不差:
- 请求路径:
*.php(不能写成*.php.*或漏掉星号) - 模块:
FastCgiModule(注意大小写,不是FastCGIModule或fcgimodule) - 可执行文件:
C:\php\php-cgi.exe(必须是绝对路径,且指向.exe,不是.dll) - 名称:
PHP via FastCGI(纯标识,但建议保持一致,方便后续排查)
如果点确定后提示“找不到模块”,说明 CGI 功能没启用:回到“控制面板 → 程序与功能 → 启用或关闭 Windows 功能”,展开“Internet 信息服务 → 万维网服务 → 应用程序开发功能”,确保 CGI 已勾选。
调试 FastCGI 失败最有效的两步
当浏览器只显示空白页或 500 错误,别急着重装,先做这两件事:
- 在 CMD 中手动运行:
c:\php\php-cgi.exe -i(注意是小写 i),看是否输出完整 phpinfo —— 若报 DLL 加载失败,就去php.ini里关掉对应extension=行 - 打开 IIS 日志(默认在
%SystemDrive%\inetpub\logs\LogFiles\W3SVC1\),找最近一条带500 0 0或500 0 2148074254的记录,末尾的数字是 Win32 错误码,查net helpmsg 2148074254可得具体原因(常见如 0x8007007e = 找不到 DLL)
最容易被忽略的是:PHP 安装目录不能含中文或空格,C:\Program Files\php 这类路径会导致 php-cgi.exe 启动失败且日志里只报“进程退出”,没有任何线索。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











