新项目应直接选用 PHP 8.3,因其是当前唯一处于安全支持期(至2026年11月)的稳定版本,而 PHP 8.2 已于2025年11月28日终止支持,现存在已知 CVE 风险且无补丁。

新项目直接选 PHP 8.3,别犹豫。PHP 8.2 的安全支持已于 2025 年 11 月 28 日终止,当前(2026 年 9 月)已过期近 10 个月,官方不再提供任何补丁——这意味着你上线当天就带着已知 CVE 风险裸奔。
为什么 PHP 8.3 是当前唯一合理的新项目底座
它不是“刚发布”,而是经过一年以上生产验证的稳定版本:Ubuntu 22.04 LTS 默认源已收录,Laravel 10/11、Symfony 6.4、ThinkPHP 8.0 全线兼容,宝塔、Docker 官方镜像也已同步适配。关键点在于支持周期——PHP 8.3 的安全支持截止到 2026 幱11 月,你启动项目时还有至少 14 个月兜底时间。
- PHP 8.2 已 EOL:连
php -v显示的版本号都带不上“supported”标签,composer install可能因依赖包弃用 PHP 8.2 而静默降级或报错 - PHP 8.4 尚未发布(预计 2026 年 11 月),目前所有标称“8.4”的镜像或扩展都是测试版或伪造包,官网 downloads.php 页面无对应 Tarball
- 所谓“8.2 更稳妥”是旧认知残留:它只对 2024 年前的老项目维护有意义,对新项目是主动放弃安全更新权
升级 PHP 8.2 → 8.3 实际要改什么
迁移成本远低于预期,多数项目只需处理两类变更:
-
json_decode($x, null, 512, JSON_THROW_ON_ERROR)改成json_validate($x)做前置校验(零开销,不解析结构) - 类常量补显式类型,如
public const string VERSION = '1.0';,而非const VERSION = '1.0'; - 重写父类方法必须加
#[\Override]属性,否则触发E_WARNING(IDE 通常可一键补全) - 禁用
rand()/mt_rand(),改用$r = new Randomizer(); $r->getInt(1, 100);
第三方扩展如 pdo_mysql、openssl、opcache 无感升级;sqlsrv 等需确认是否发布 8.3 兼容 DLL,但主流 Windows 扩展包已覆盖。
立即学习“PHP免费学习笔记(深入)”;
CLI 和 Web 环境版本不一致的坑
宝塔里给网站绑了 PHP 8.3,不代表终端执行 php -v 就是 8.3——Web 请求走 php-fpm,CLI 走系统 /usr/bin/php 软链接,两者完全独立。
- Ubuntu/Debian 用户:装完
php8.3-cli后,用sudo update-alternatives --config php切 CLI 版本 - macOS 用户:Homebrew 装
php@8.3后,确保which php指向/opt/homebrew/bin/php,而非系统自带/usr/bin/php - Docker 用户:镜像名必须明确含
8.3,例如php:8.3-apache,不能只写php:latest(当前可能指向 8.2)
最容易被忽略的是 Composer 自动检测逻辑:它会读取 CLI 的 PHP 版本决定安装哪些依赖,若 CLI 还是 8.2,composer require laravel/framework 可能拉低版本兼容包,导致运行时报错。



















