必须使用php-cgi.exe而非php.exe,因其专为fastcgi协议设计;需在iis中添加模块映射并配置php.ini的cgi.force_redirect=0、extension_dir及php_fcgi_max_requests环境变量,最后通过php-cgi -v验证并重启iis。

添加模块映射时必须用 php-cgi.exe,不能用 php.exe
这是最常见的失败原因。IIS 通过 FastCGI 协议与 PHP 通信,php.exe 是 CLI 模式可执行文件,不支持 FastCGI 协议;只有 php-cgi.exe 才能响应 IIS 的 FastCGI 请求。如果误选 php.exe,访问 PHP 页面会直接返回「HTTP 错误 500.0 - FastCGI 进程意外退出」。
实操建议:
- 确认你下载的是 Non-Thread-Safe (NTS) 版本的 PHP(官网 zip 包名含
nts),它才自带php-cgi.exe - 路径必须写全,例如:
C:\php\php-cgi.exe,不能写相对路径或带空格未引号包裹的路径 - 在 IIS 管理器中,进入「处理程序映射」→「添加模块映射…」,按以下填:
请求路径:
*.php模块:FastCgiModule可执行文件:C:\php\php-cgi.exe(替换成你的真实路径) 名称:PHP_via_FastCGI
php.ini 中必须关闭 cgi.force_redirect 并设置 extension_dir
IIS + FastCGI 场景下,cgi.force_redirect = 1 会导致 PHP 拒绝被外部 Web 服务器调用,直接报 500 错误;而 extension_dir 路径错误则会让所有扩展(如 php_mbstring.dll)加载失败,phpinfo() 显示缺失关键模块。
实操建议:
- 打开
php.ini,搜索并修改两处(确保前面的分号;已删除):cgi.force_redirect = 0extension_dir = "C:/php/ext"(路径用正斜杠或双反斜杠,避免单反斜杠转义问题) - 顺手检查时区:
date.timezone = "Asia/Shanghai",否则date()等函数可能出错 - 保存后,必须重启 IIS(运行
iisreset或在服务里重启 World Wide Web Publishing Service)才生效
FastCGI 设置里要手动加 PHP_FCGI_MAX_REQUESTS 环境变量
默认情况下,PHP-CGI 进程在处理若干请求后会自动退出,但 IIS 不会自动拉起新进程,导致后续请求卡死或 500 错误——现象是:前几个 PHP 页面正常,刷几次就挂了。
实操建议:
- 在 IIS 管理器中,进入「FastCGI 设置」(不是「处理程序映射」),双击你的
php-cgi.exe条目 - 点击「环境变量」→「编辑」→「添加」:
名称:
PHP_FCGI_MAX_REQUESTS值:10000(足够开发用,生产环境可设更高) - 同时建议勾选「监视应用程序池以确保其运行」,并把「实例最大请求数」也设为
10000,保持内外一致
测试时遇到 500 错误,优先查 php-cgi.exe 是否能命令行运行
很多配置看似正确,但 php-cgi.exe 本身无法启动,IIS 就只能报泛泛的 500。根本原因常是缺 VC++ 运行库或 DLL 依赖冲突。
实操建议:
- 打开命令行(管理员权限),cd 到 PHP 目录,执行:
php-cgi.exe -v若报vcruntime140.dll缺失,装Microsoft Visual C++ 2015–2022 Redistributable (x64) - 若报
Unable to load dynamic library,说明extension_dir路径不对,或某个.dll文件损坏/版本不匹配 - 临时启用错误显示:在
php.ini中设display_errors = On、log_errors = Off,再刷新页面,错误会直接输出到浏览器(注意上线前关掉)
IIS 下 PHP 映射真正卡点不在界面操作多复杂,而在三个位置必须严格对齐:FastCGI 进程能否独立运行、php.ini 是否被正确加载、环境变量是否透传到位。少一个,就只差一行错误提示,但排查起来可能花半天。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











