PHP 8.3 在 Windows 上 php -v 成功不代表 Web 服务可用,根本原因是 CLI 与 Web(Apache/Nginx/IIS)加载不同 php.ini、扩展 DLL 和运行时;必须选用 VC17+NTS 官方 ZIP 包,安装 VC2022 运行库,解压至无空格无中文路径(如 C:\php),复制 php.ini-development 为 php.ini 并启用 extension_dir、mysqli、zip 及 date.timezone,通过 phpinfo() 确认实际加载的配置路径,改后重启 Web 服务。

PHP 8.3 在 Windows 上能跑 php -v,不等于 Web 服务能用——根本原因在于 CLI 和 Web(Apache/Nginx/IIS)加载的是不同 php.ini、不同扩展 DLL、甚至不同运行时依赖。部署失败的绝大多数情况,不是“没装好”,而是“配错了位置”或“混用了版本类型”。
怎么选对 ZIP 包:VC17 + NTS 是唯一推荐组合
PHP 8.3 官网只提供 Non-Thread Safe(NTS)版本,Thread Safe(TS) 已彻底下线。别再搜“TS 包”,那只会带你进旧教程陷阱。
- 去 https://www.php.cn/link/a9a2c061a1c2743d489c6863eae6725a,找带
VC17和x64标识的包,例如:php-8.3.6-Win32-vs17-x64.zip - 必须安装
Microsoft Visual C++ 2022 Redistributable (x64),否则启动php.exe直接报错0xc000007b - 跳过标有
Source code或Dev Pack的下载项——它们不能运行
解压路径和 php.ini 配置是成败关键
Windows 11 对路径更敏感,C:\Program Files\php 或 D:\my php\8.3 这类含空格/中文的路径,会导致 extension=openssl 加载失败、php --ini 显示配置未加载。
- 解压到无空格、无中文、层级极浅的路径,例如:
C:\php(不是C:\php-8.3,也不是D:\dev\php\8.3) - 把
php.ini-development复制为php.ini;不要用php.ini-production,它默认禁用所有扩展 - 修改
php.ini中三处必调项:extension_dir = "C:/php/ext" extension=mysqli extension=zip date.timezone = "Asia/Shanghai"
注意:extension=后面写模块名(如mysqli),不是文件名(如php_mysqli.dll)
为什么 phpinfo() 不显示 zip 或 mysqli 扩展
你改了 C:\php\php.ini,但 Apache 可能还在读 C:\xampp\php\php.ini 或 C:\Windows\php.ini。CLI 能看到扩展,网页里看不到,几乎 100% 是这个原因。
立即学习“PHP免费学习笔记(深入)”;
- 先建一个
info.php文件,内容为<?php phpinfo(); ?>,用浏览器访问它,看Loaded Configuration File显示的路径 - 只改那个路径下的
php.ini,不是你认为“应该改”的那个 - 确认
C:\php\ext\php_zip.dll和php_mysqli.dll真实存在;如果缺失,说明你下的是精简版 ZIP,换回官网完整包 - 改完后必须重启 Web 服务(Apache/Nginx/IIS),不是刷新网页
Web 服务与 CLI 共用同一套配置的最简方案
如果你不想每次验证都怀疑“到底读的是哪个 ini”,就强制统一路径:
- CLI 下临时指定配置:
php -c C:\php\php.ini -v,确保命令行也走你改的那个文件 - Apache:在
httpd.conf中硬编码路径:PHPIniDir "C:/php" LoadModule php_module "C:/php/php8apache2_4.dll"
- Nginx + php-fpm:在
php-fpm.conf或启动命令中加-c C:\php\php.ini - 切记:改完环境变量后,所有已打开的 CMD/PowerShell/VS Code 终端都必须关闭重开,否则
PATH不生效
最常被跳过的其实是 date.timezone 和 openssl ——它们不报致命错误,但会让 date() 返回 UTC 时间、让 Composer 安装卡在证书校验,问题现象分散,排查成本远高于提前配好。



















