能跑,但必须用nts版php+fastcgi映射+关键php.ini配置;需先启用iis的cgi功能,下载nts版php解压至英文路径,设cgi.fix_pathinfo=0、fastcgi.impersonate=1、extension_dir和时区,iis中添加fastcgi应用并配置phprc环境变量,再为*.php添加处理器映射,最后用phpinfo()验证。

能跑,但必须用 NTS 版 PHP + 正确的 FastCGI 映射 + 关键 php.ini 配置,三者缺一不可;用错 TS 版或漏掉 cgi.fix_pathinfo=0,大概率返回 500 或直接显示源码。
确认 IIS 已启用 CGI 功能
这是前置硬性条件,不是可选项。IIS 默认不装 CGI,FastCGI 模块依赖它。
- 打开“控制面板 → 程序和功能 → 启用或关闭 Windows 功能”
- 展开“Internet Information Services → World Wide Web Services → 应用程序开发功能”
- 必须勾选“CGI”(注意不是“ISAPI 扩展”或“ISAPI 过滤器”)
- 点确定,等待安装完成 —— 不重启 IIS 也行,但后续配置生效前建议执行一次
iisreset /noforce
下载并解压 NTS 版 PHP(非 Thread Safe)
Windows 上 IIS + FastCGI 只认 NTS 版;用 TS 版会报 0x8007000d 错误或进程闪退。
- 去 windows.php.net/download/ 下载最新
Non-Thread-SafeZIP 包(如php-8.3.x-nts-Win32-vs17-x64.zip) - 解压到纯英文、无空格路径,例如:
C:\PHP\(不要放C:\Program Files\或桌面) - 确认目录下存在
php-cgi.exe(不是php.exe)—— FastCGI 必须调用这个 - 复制
php.ini-development改名为php.ini,放在同一级目录
关键 php.ini 配置项必须改对
以下几项若遗漏或设错,phpinfo() 可能正常,但真实项目(尤其含重写或数据库连接的)会 500 或超时。
-
cgi.fix_pathinfo=0—— 必须设为0,否则 IIS 传入的 PATH_INFO 被 PHP 二次解析,导致路由错误或安全风险 -
fastcgi.impersonate=1—— 启用后 PHP 进程以当前请求用户身份运行,影响文件读写权限判断 -
extension_dir = "C:\PHP\ext"—— 路径必须绝对且指向正确的ext目录,末尾不加斜杠 -
date.timezone = Asia/Shanghai—— 避免getdate()等函数警告 - 启用扩展时取消注释:如
extension=mysqli、extension=mbstring,但别开不存在的 DLL(如php_mssql.dll已废弃)
IIS 中添加 FastCGI 应用与处理器映射
两步不能合并:先注册 php-cgi.exe 为 FastCGI 应用,再把 *.php 请求映射过去;顺序反了或只做其一,都会 500。
- 在 IIS 管理器左侧右键服务器名 → “FastCGI 设置” → 右侧“添加应用程序”
- “完整路径”填:
C:\PHP\php-cgi.exe - 点击“环境变量”按钮,新增两项:
PHPRC=C:\PHP\(强制 PHP 读这个目录下的php.ini)
PHP_FCGI_MAX_REQUESTS=10000(防内存泄漏,避免进程无限累积) - 回到网站节点 → “处理程序映射” → 右侧“添加模块映射”
请求路径:*.php
模块:FastCgiModule
可执行文件:C:\PHP\php-cgi.exe
名称:PHP_via_FastCGI
勾选“允许访问此资源的请求”
最后建一个 info.php(内容 <?php phpinfo(); ?>),放网站根目录,用浏览器访问。如果看到完整信息页,说明通了;如果弹下载、显示源码、或 500 错误,请回头核对 cgi.fix_pathinfo 和 PHPRC 是否生效 —— 这两个是实际环境中最常被忽略的点。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











