简短的回答
升级到 PHP 8.4。它修复 PHP2Shell 的版本是 8.4.27。如果某个插件、框架或服务器软件包让你暂时上不了 8.4,8.3(在 8.3.36 中修复)是可以接受的第二选择。
新的迁移不要选 8.2。只有在你运行的所有东西都支持 8.5 时,才选 8.5。
受支持的分支及其终止日期
这里的“终止支持”指 PHP 项目不再为该分支发布安全修复的日期。日期来自 PHP 项目的受支持版本页面,读取于 2026 年 10 月 21 日。
| 分支 | 修复版本 | 终止支持 | 现状 |
|---|---|---|---|
| 8.5 | 8.5.12 | 2029 年 12 月 31 日 | 最新。2025 年 11 月 20 日发布。 |
| 8.4 | 8.4.27 | 2028 年 12 月 31 日 | 推荐。2024 年 11 月 21 日发布。 |
| 8.3 | 8.3.36 | 2027 年 12 月 31 日 | 可以接受。2023 年 11 月 23 日发布。 |
| 8.2 | 8.2.35 | 2026 年 12 月 31 日 | 大约十周后结束。 |
| 8.1 | 无,只有源码层面的 backport 分支 | 2025 年 12 月 31 日 | 已结束。见 PHP 8.1。 |
| 8.0 | 无,只有源码层面的 backport 分支 | 2023 年 11 月 26 日 | 已结束。 |
| 7.4 | 无,只有源码层面的 backport 分支 | 2022 年 11 月 28 日 | 已结束。见 PHP 7.4。 |
活跃支持(修 bug)和安全支持是分开的。8.4 的活跃支持在 2026 年 12 月 31 日结束,安全修复会持续到 2028 年 12 月 31 日。8.3 的活跃支持已经结束,只剩安全修复。
为什么选 8.4
- 时间充裕。 安全修复持续到 2028 年 12 月 31 日,距离下一次被迫升级还有两年多。
- 容易获得。 很多主机商的 PHP 版本选择器里已经有 8.4,主流 Linux 发行版和软件仓库也都提供。见 主机商 和 各发行版指南。
- WordPress。 WordPress 手册列出从 WordPress 6.7 起支持 PHP 8.4。更早的 WordPress 版本(6.4 到 6.6)没有列出。
- 少跳几次。 从 7.4 或 8.1 直接升到 8.4,中间每个版本的变化可以一次处理完。
有一点要说明。8.4 的活跃支持在今年年底结束,对一个发布两年的分支来说这很正常。安全修复按上表的日期继续提供。
为什么 8.3 可以接受
安全修复持续到 2027 年 12 月 31 日,从今天算大约还有 14 个月。如果你依赖的某个插件或库还不能在 8.4 上正常运行,就选 8.3,并把下一次迁移安排在 2027 年。
为什么不选 8.2
8.2 在 2026 年 12 月 31 日终止支持。现在迁到 8.2,几周后还得再迁一次。已经在 8.2 上的站点,应该现在安装 8.2.35 拿到 PHP2Shell 修复,然后安排迁移到 8.4。见 PHP 8.2。
为什么要等一切都支持才选 8.5
8.5 的支持期最长,但你的软件得能在上面跑。WordPress 手册列出从 WordPress 6.9 起支持 PHP 8.5。插件、主题、Composer 包,以及 imagick、redis 这类扩展,也都要各自支持 8.5。切换前逐一确认,并先读一遍 8.4 到 8.5 的迁移指南。
如果这些都能确认,8.5 是不错的目标。确认不了的话,8.4 更稳妥。
规划升级
- 如果你在 8.2 或 8.3 上,先安装当前分支的修复版本。 版本跳跃之后再按你自己的节奏做。如果你在 8.1 或更老的版本上,跳到新版本本身就是修复,见 暂时无法升级时。
- 备份文件和数据库, 并测试一次恢复。没有实际恢复过的备份,你无法确定它能用。
- 搭一个预发布(staging)副本, 运行目标 PHP 版本,扩展和
php.ini设置与生产环境一致。 - 扫描代码。 对你自己写的代码运行 PHPCompatibility,也可以再跑一遍 Rector。命令在下面的指南里。
- 检查插件。 在 WordPress 里打开每个插件的页面,看它的 “Requires PHP” 字段,再看最近一次发布是什么时候。所有更新先在 staging 上做。多年没有发布新版本的插件,换掉。
- 在 staging 上打开完整的错误日志, 即
error_reporting = E_ALL和log_errors = On。把登录、结账、表单、上传和定时任务都点一遍,然后看日志。 - 切换生产环境, 重启所有 PHP worker,并 确认正在运行的版本。WordPress 主机的操作步骤见 更改 PHP 版本。
- 几天之内保留随时切回旧版本的能力。 大多数面板都可以一键切回。
不要为了让扫描通过去改第三方插件的代码。更新插件,或者换掉它。
兼容性工具
composer require --dev phpcompatibility/php-compatibility
vendor/bin/phpcs -ps --standard=PHPCompatibility --runtime-set testVersion 8.4 .
PHPCompatibility 读取你的源码,报告在指定版本上会出问题的代码。Rector 可以自动改写其中一部分。两者都不会运行你的代码,所以 staging 上的测试仍然少不了。
分步指南
- PHP 7.4 升级到 8.4,跨度最大,从 8.0 一路到 8.4。
- PHP 8.1 升级到 8.4,涵盖 8.2、8.3 和 8.4。
- PHP 8.2 升级到 8.4,涵盖 8.3 和 8.4。
- PHP 8.6,为什么不要等它。
最后审阅:2026年10月22日