PHP 7.1.33 在 IIS 7.5 虚拟目录中不执行的根本原因是处理程序映射不继承,需将虚拟目录转为应用程序并配置 FastCgiModule 映射、PHPRC 环境变量、VC14 运行库及纯英文路径。

PHP 7.1.33 在 IIS 7.5 上创建虚拟目录能跑起来,但必须绕开几个硬坑——尤其是 php-cgi.exe 路径权限、PHPRC 环境变量缺失、以及虚拟目录继承不到 FastCGI 设置这三点。直接套用默认网站配置,90% 会返回 500.0 错误或空白页。
为什么虚拟目录里 PHP 文件不执行,只下载或报 404
根本原因是:IIS 的处理程序映射(Handler Mapping)默认只在「网站级」或「应用程序级」生效,虚拟目录(Virtual Directory)本身不自动继承 FastCgiModule 映射规则。哪怕根站点能跑 phpinfo(),虚拟目录里访问 test.php 仍可能被当成静态文件下载,或直接 404。
- 检查 IIS 管理器中该虚拟目录是否已「转换为应用程序」:右键虚拟目录 → «转换为应用程序» → 应用程序池选一个已启用 FastCGI 的池(如
DefaultAppPool) - 确认该应用程序(而非父网站)的 «处理程序映射» 中存在
*.php映射,且模块是FastCgiModule,可执行文件指向正确的php-cgi.exe(例如C:\PHP71\php-cgi.exe) - 若映射存在但无效,大概率是权限问题:IIS_IUSRS 对
php-cgi.exe所在目录无读取+执行权限,需手动赋予
php.ini 不生效?重点盯死 PHPRC 环境变量
IIS + FastCGI 下,php-cgi.exe 不会自动按当前工作目录找 php.ini。PHP 7.1.33 默认只认注册表或环境变量指定的位置。漏设 PHPRC,就会 fallback 到默认值(空),导致 extension_dir、date.timezone 全部失效,扩展加载失败、时区警告满天飞。
- 打开 IIS 管理器 → 服务器节点 → «FastCGI 设置» → 找到你添加的
php-cgi.exe条目 → «编辑» → «环境变量» - 必须添加一项:
PHPRC = C:\PHP71\(路径末尾不加反斜杠,且确保该路径下有php.ini) - 顺手加
PHP_FCGI_MAX_REQUESTS = 10000防止进程过早回收;fastcgi.impersonate = 1在php.ini中也得开启,否则$_SERVER['AUTH_USER']可能为空
PHP 7.1.33 必须用 NTS 版,且依赖 VC14 运行库
PHP 7.1.x 全系列由 Visual Studio 2015(即 VC14)编译,必须安装对应运行时。即使系统已装 VC15/VC16,缺 VC14 仍会触发 php-cgi.exe - FastCGI 进程意外退出,错误日志里通常只显示「0x8007007e」——本质是找不到 msvcp140.dll 或 vcruntime140.dll。
立即学习“PHP免费学习笔记(深入)”;
- 去微软官网下载并安装:
vc_redist.x64.exe(64位系统)或vc_redist.x86.exe(32位 IIS 模式) - 务必确认 PHP 包名含
nts字样,例如php-7.1.33-nts-Win32-VC14-x64.zip;若误用 TS 版,会卡在PHP Warning: Module 'xxx' already loaded并崩溃 -
php.ini中禁用zend_extension(如 opcache.dll)以外的 Zend 扩展,PHP 7.1.33 对某些旧版 xdebug 兼容性差,易引发 500
最常被忽略的一点:虚拟目录路径若含中文或空格(如 C:\网站\myapp),IIS 7.5 会静默失败——php-cgi.exe 启动时无法解析路径,错误日志也不报具体原因。所有路径(PHP 安装目录、虚拟目录物理路径、upload_tmp_dir)请一律用纯英文、无空格、盘符开头的短路径。



















