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 上能跑
,不等于 Web 服务能用——根本原因在于 CLI 和 Web(Apache/Nginx/IIS)加载的是不同
、不同扩展 DLL、甚至不同运行时依赖。部署失败的绝大多数情况,不是“没装好”,而是“配错了位置”或“混用了版本类型”。
怎么选对 ZIP 包:VC17 + NTS 是唯一推荐组合
PHP 8.3 官网只提供 Non-Thread Safe(NTS)版本,
已彻底下线。别再搜“TS 包”,那只会带你进旧教程陷阱。
去
https://www.php.cn/link/a9a2c061a1c2743d489c6863eae6725a
,找带
和
标识的包,例如:
必须安装
,否则启动
直接报错
跳过标有
或
的下载项——它们不能运行
解压路径和
php
.ini 配置是成败关键
Windows 11 对路径更敏感,
或
这类含空格/中文的路径,会导致
加载失败、
显示配置未加载。
解压到无空格、无中文、层级极浅的路径,例如:
(不是
,也不是
)
把
复制为
;不要用
,它默认禁用所有扩展
修改
中三处必调项:
注意:
后面写模块名(如
),不是文件名(如
)
为什么 phpinfo() 不显示 zip 或 mysqli 扩展
你改了
,但 Apache 可能还在读
或
。CLI 能看到扩展,网页里看不到,几乎 100% 是这个原因。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
先建一个
文件,内容为
,用浏览器访问它,看
显示的路径
只改那个路径下的
,不是你认为“应该改”的那个
确认
和
真实存在;如果缺失,说明你下的是精简版 ZIP,换回官网完整包
改完后必须重启 Web 服务(Apache/Nginx/IIS),不是刷新网页
Web 服务与 CLI 共用同一套配置的最简方案
如果你不想每次验证都怀疑“到底读的是哪个 ini”,就强制统一路径:
CLI 下临时指定配置:
,确保命令行也走你改的那个文件
Apache:在
中硬编码路径:
Nginx + php-fpm:在
或启动命令中加
切记:改完环境变量后,所有已打开的 CMD/PowerShell/VS Code 终端都必须关闭重开,否则
不生效
最常被跳过的其实是
和
——它们不报致命错误,但会让
返回 UTC 时间、让 Composer 安装卡在证书校验,问题现象分散,排查成本远高于提前配好。
php -vphp.iniThread Safe(TS)VC17x64php-8.3.6-Win32-vs17-x64.zipMicrosoft Visual C++ 2022 Redistributable (x64)php.exe0xc000007bSource codeDev PackC:\Program Files\phpD:\my php\8.3extension=opensslphp --iniC:\phpC:\php-8.3D:\dev\php\8.3php.ini-developmentphp.iniphp.ini-productionphp.iniextension_dir = "C:/php/ext"
extension=mysqli
extension=zip
date.timezone = "Asia/Shanghai"extension=mysqliphp_mysqli.dllC:\php\php.iniC:\xampp\php\php.iniC:\Windows\php.iniinfo.phpLoaded Configuration Filephp.iniC:\php\ext\php_zip.dllphp_mysqli.dllphp -c C:\php\php.ini -vhttpd.confPHPIniDir "C:/php"
LoadModule php_module "C:/php/php8apache2_4.dll"php-fpm.conf-c C:\php\php.iniPATHdate.timezoneopenssldate()