如何配置Windows环境实现PHP8.3在Windows系统上的部署?
- 内容介绍
- 文章标签
- 相关推荐
本文共计960个文字,预计阅读时间需要4分钟。
PHP 8.3 在 Windows 上运行 - 输入 `php -v`,若不等于 Web 服务器(Apache/Nginx/IIS)的版本,基本原因在于 CLI 和 Web 加载的 `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 安装卡在证书校验,问题现象分散,排查成本远高于提前配好。
本文共计960个文字,预计阅读时间需要4分钟。
PHP 8.3 在 Windows 上运行 - 输入 `php -v`,若不等于 Web 服务器(Apache/Nginx/IIS)的版本,基本原因在于 CLI 和 Web 加载的 `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 安装卡在证书校验,问题现象分散,排查成本远高于提前配好。

