根本原因是iis未将.php文件识别为可执行脚本,而是当作静态文件处理;需检查cgi功能启用、.php映射配置(fastcgimodule+php-cgi.exe路径)、php.ini中cgi.force_redirect=0与fastcgi.impersonate=1设置,并以管理员身份运行iisreset /restart生效。

为什么浏览器访问 PHP 文件直接下载或 404
根本原因不是 PHP 没装好,而是 IIS 根本没把 .php 当作可执行脚本处理——它默认当静态文件扔给客户端了。这和 Apache 的 AddHandler 或 Nginx 的 fastcgi_pass 缺失是同一类问题。
常见现象包括:http://localhost/test.php 点开后弹出「另存为」对话框;或者返回 HTTP 404(注意:不是 500),说明请求压根没进 PHP 处理流程。
- 检查 IIS 是否启用了
CGI功能(不是只勾选「Internet Information Services」主项) - 确认「处理程序映射」里有没有对
*.php的映射,且模块是FastCgiModule,不是IsapiModule - 确保映射中「可执行文件」路径指向的是
php-cgi.exe,而非php.exe(后者是 CLI 版,不兼容 FastCGI)
FastCGI 设置里 php-cgi.exe 启动就退出
php-cgi.exe - FastCGI 进程意外退出 是 Win7 下最典型的报错,背后几乎全是运行时依赖缺失,尤其在纯净版系统上。
- 必须安装
Microsoft Visual C++ 2015–2019 Redistributable (x64)——PHP 7.2+ 依赖vcruntime140.dll14.16 版本,旧版(如 14.0)会静默失败 - PHP 解压路径不能含中文、空格或过长路径(例如
C:\Program Files\php),推荐用短路径如C:\php74 -
php.ini中必须显式设置:cgi.force_redirect = 0和fastcgi.impersonate = 1,缺一不可 - 改完
php.ini后,必须以管理员身份运行iisreset /restart,否则配置不生效
phpinfo() 不显示或报 500 错误
能跑普通 echo "hello",但 phpinfo() 报错,通常不是环境问题,而是 php.ini 的安全限制或语法开关没调对。
- 检查
disable_functions行是否禁用了phpinfo,如有则删掉该项 - 确认
short_open_tag = On(虽然<?php不依赖它,但部分老项目或测试文件用开头) -
error_reporting和display_errors要同时开启,否则错误被吞掉,只能查 Windows 事件查看器里的Application日志 - 如果页面空白但无报错,用命令行手动运行
C:\php74\php-cgi.exe -i,看是否输出完整信息——若这里都失败,说明php.ini路径或内容本身有硬伤
网站物理路径和 DocumentRoot 对不上
IIS 没有 Apache 那种全局 DocumentRoot 概念,每个站点的「物理路径」是独立配置的,放错位置必然 404。
- 不要默认把项目丢进
C:\inetpub\wwwroot——除非你新建站点时明确指定物理路径为该目录 - 新建站点时,在「基本设置」里填的「物理路径」才是真实生效位置,例如填了
D:\myproject,那index.php就必须在D:\myproject\index.php - 务必用
phpinfo()页面里的Loaded Configuration File值,确认当前请求加载的是你修改过的那个php.ini,而不是系统默认的或其他版本残留的
IIS 对 PHP 的路径逻辑非常“实在”:它不猜、不继承、不 fallback。每一步映射、每一条配置、每一个 DLL 依赖,都得严丝合缝。最容易被忽略的,是 iisreset 必须以管理员权限执行,以及 php-cgi.exe 路径里不能出现任何空格或中文——哪怕只是看着像,也可能因编码解析失败而静默退出。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











