应更换为Remi源(CentOS)或ondrej/php PPA(Ubuntu),启用对应PHP版本仓库并禁用旧源干扰,升级后需验证CLI/FPM版本一致、配置路径正确、扩展适配及代码兼容性。

PHP 版本太低,系统源不提供新版怎么办
CentOS 7 默认源里的 php 是 5.4,Ubuntu 16.04 是 7.0,这些版本早已 EOL(停止维护),连安全补丁都不再更新。直接用系统自带包管理器升级会失败或卡在旧版,必须换第三方源——但不是随便加个 repo 就行,得选对、配对、禁对。
Remi 源是最稳妥的选择(尤其对 CentOS/RHEL)
Remi 提供多个 PHP 主版本(7.4/8.0/8.1/8.2/8.3),每个版本独立仓库、可共存、支持 yum 和 dnf,且和系统原生包冲突极少。关键不是“启用就完事”,而是要:
- 先装
epel-release(Remi 依赖 EPEL):sudo yum install epel-release - 再装 Remi 源本身:
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm(CentOS 7 示例) - 启用对应 PHP 版本的仓库(默认是禁用的):
sudo yum-config-manager --enable remi-php82 -
务必禁用系统自带 php 包的自动升级干扰:在
/etc/yum.repos.d/remi.repo中确认enabled=0的其他 remi 子仓库没被误开;同时检查php相关包是否被exclude=锁定
Ubuntu 用户优先考虑 ondrej/php PPA(但注意已停更风险)
ondrej/php 曾是 Ubuntu 最常用的 PHP 源,但它在 2024 年 1 月起停止维护 PHP 8.0 及更早版本,且不再为 Ubuntu 22.04+ 提供新包。目前仅维持 PHP 8.1/8.2/8.3 的有限更新。如果还在用:
- 加源命令仍是:
sudo add-apt-repository ppa:ondrej/php - 但必须立刻执行:
sudo apt update,否则可能拉到过期 Release 文件导致 404 - 安装时明确指定版本,避免意外装回系统默认版:
sudo apt install php8.2-cli php8.2-mysql - 卸载旧版前先确认所有扩展都适配新版本,比如
php-memcached在 8.2 下需装php8.2-memcached,名字变了
升级后常见报错和验证要点
升级不是改个版本号就结束。最常踩的坑是配置残留、扩展缺失、CLI 与 FPM 版本不一致:
立即学习“PHP免费学习笔记(深入)”;
- 运行
php -v和php-fpm -v必须输出相同版本,否则 Nginx/Apache 会 502 -
php --ini查看加载的php.ini路径,别还在用 /etc/php/7.4/cli/php.ini 却以为改的是 8.2 的 - 扩展如
mcrypt、mysql已彻底移除,报PHP Fatal error: Uncaught Error: Call to undefined function mcrypt_encrypt()就得重写或换库 - 某些宝塔、AMH 等面板会锁定 PHP 版本路径,即使系统升级了,面板仍调用旧二进制,得在面板后台手动切换或重装 PHP 插件
第三方源本质是绕过系统限制,但不会自动解决兼容性断层。版本跳得越大(比如从 5.6 直升 8.2),代码里藏着的隐式类型转换、废弃函数、短数组语法等坑就越深,得逐个服务验证。











