windows标准版运行php必须四步到位:一是iis启用cgi并搭配nts版php;二是设phprc环境变量指向php根目录以加载php.ini;三是fastcgi中手动添加php_fcgi_max_requests=1000防静默崩溃;四是确认vc运行时与php编译版本(如vs17)严格匹配,否则报错0xc000007b。

Windows标准版(如 Windows Server 2019/2022 或 Windows 10/11)上要让 PHP 跑起来,不是装个软件点下一步就行——关键得选对版本、配对运行时、绕开 IIS 默认陷阱、验证扩展是否真加载。四步能走通,但每步都有硬门槛。
IIS 必须启用 CGI,且只能用 NTS 版 PHP
Windows 标准版自带 IIS,但它默认不装 CGI 模块,而 FastCGI 是 PHP 运行的前提。装错 PHP 类型(比如用了 TS 版)会导致 500 错误或 php-cgi.exe 启动即退出。
- 在“服务器管理器”→“添加角色和功能”→“角色服务”里,务必勾选 CGI(不是“ASP.NET”或“WebSocket”)
- 从
https://windows.php.net/download/下载Non-Thread Safe (NTS)版本,例如php-8.3.12-Win32-vs17-x64.zip - 解压到
C:\php(路径不能含空格或中文),复制php.ini-production为php.ini - 检查
php.ini中extension_dir = "C:/php/ext"和date.timezone = "Asia/Shanghai"是否已设好
PHPRC 环境变量是 IIS 加载 php.ini 的唯一可靠方式
IIS 的 FastCGI 不认系统 PATH 下的 PHPIniDir,也不自动找 php.ini。没设 PHPRC,所有扩展(mysqli、pdo_mysql)都处于“已启用但未加载”状态,phpinfo() 里看不到,连接数据库直接报 Class not found。
- 新建系统环境变量:
PHPRC→ 值为C:\php(不是C:\php\php.ini) - 重启 IIS:命令行执行
iisreset /restart,不是只刷新网站 - 验证:访问
http://localhost/test.php(内容为<?php echo get_cfg_var('extension_dir'); ?>),输出应为C:\php\ext
FastCGI 设置必须手动加环境变量 PHP_FCGI_MAX_REQUESTS
缺这个变量,IIS 可能跑几小时就卡死,或突然返回 500 —— 不报错、不写日志,只静默失败。这是 Windows Server 上最隐蔽的稳定性坑。
- 打开 IIS 管理器 → 服务器节点 → “FastCGI 设置” → 双击你的
php-cgi.exe条目 - 点击“环境变量”→“添加”,填入:
Name: PHP_FCGI_MAX_REQUESTS,Value: 1000 - 同时确认“活动状态”为“True”,“最大实例数”建议设为 4(太高易占满内存)
- 别依赖 GUI 界面“添加模块映射”时的默认值——它不会自动带这个变量
php-cgi.exe 启动失败?先查 vcruntime 和架构匹配
The application was unable to start correctly (0xc000007b) 或 VCRUNTIME140.dll is not compatible 这类错误,90% 是 VC 运行时版本与 PHP 编译器不一致,不是 PHP 自身坏了。
- 看 PHP ZIP 包名:如
vs17表示用 Visual Studio 2022 编译,必须装Visual C++ Redistributable for Visual Studio 2022(x64) - 不要混装多个 VC 版本;卸载旧版再装新版更稳妥
- 用
Dependency Walker或dumpbin /dependents C:\php\php-cgi.exe查实际依赖的 DLL 名称 - 如果服务器是 Windows Server 2012 R2,
vs17可能不兼容,得降级用vs15(VS2017)版 PHP
真正卡住人的从来不是“能不能跑”,而是“为什么刚配好能跑,过两天就 500 且毫无日志”。PHPRC 和 PHP_FCGI_MAX_REQUESTS 这两个点,文档里常一笔带过,但线上环境出问题,八成栽在这儿。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











