回滚PHP前须确认安装方式:系统包管理器、第三方源或源码编译,路径不同则操作迥异;执行php -v、which php及dpkg/rpm命令识别版本与路径,再按APT/YUM规则降级并同步调整Web服务配置。

确认当前 PHP 版本和安装方式
回滚前必须先搞清你用的是什么方式装的 PHP:系统包管理器(如 apt、yum)、第三方源(如 ondrej/ppa、remi)、或手动编译安装。不同方式回滚路径完全不同,混用会导致依赖冲突甚至服务崩溃。
执行以下命令确认基础信息:
php -v which php dpkg -l | grep php # Ubuntu/Debian rpm -qa | grep php # CentOS/RHEL
特别注意 php 可执行文件路径是否指向 /usr/bin/php(包管理器)还是 /usr/local/bin/php(源码编译),这直接决定后续操作方向。
APT 系统(Ubuntu/Debian)回滚到旧版 PHP
如果你是通过 apt 安装且用了 ondrej 的 PPA 源,它默认只保留最新两个小版本(如 8.2、8.3),旧版(如 8.1)可能已被移除。此时不能靠 apt install php8.1 直接安装,需手动指定包名并锁定版本。
立即学习“PHP免费学习笔记(深入)”;
- 查可用版本:
apt list -a php8.1-cli(把8.1换成你要的目标版本) - 安装指定版本:
sudo apt install php8.1=8.1.27-1+ubuntu22.04.1+deb.sury.org+1(版本号必须完全匹配apt list输出) - 禁止自动升级:
sudo apt-mark hold php8.1 php8.1-cli php8.1-fpm(否则下次apt upgrade会覆盖) - 切换 CLI 默认版本:
sudo update-alternatives --config php,选中对应 8.1 行
注意:如果目标版本在源里已不可见,得临时添加旧存档源,或改用 apt download + dpkg -i 手动装 deb 包——但要自行解决依赖,风险较高。
YUM/DNF 系统(CentOS/RHEL/AlmaLinux)回滚 PHP
Remi 源默认启用多个 PHP 版本仓库(如 remi-8.1、remi-8.2),回滚本质是禁用新版源、启用旧版源,再重装。
- 关闭当前活跃的高版本源:
sudo dnf module reset php(较新系统)或sudo yum-config-manager --disable remi-php82 - 启用目标旧版源:
sudo yum-config-manager --enable remi-php81 - 清理缓存并重装:
sudo dnf clean all && sudo dnf reinstall php php-cli php-fpm - 验证模块状态:
dnf module list php,确认8.1处于enabled状态
若用的是系统自带 PHP(非 Remi),则无法回滚——RHEL/CentOS 8+ 的 php 是模块化流(stream),只能切换流(dnf module install php:remi-81),不支持降级到更低 stream。
回滚后 Web 服务(Nginx/Apache)常见故障点
PHP 回滚本身只是换二进制和扩展,但 Web 服务器往往还依赖特定版本的 php-fpm socket 路径、用户组、或 php.ini 加载位置。不调整就会 502 或 503。
- Nginx:检查
fastcgi_pass是否仍指向127.0.0.1:9000(TCP)或unix:/run/php/php8.1-fpm.sock(Unix socket)——路径中的8.1必须与当前版本一致 - Apache:确认
libphp.so路径或proxy_fcgi配置里的fcgi://地址是否匹配新 FPM 实例 - FPM 服务:重启前先
sudo systemctl daemon-reload,再sudo systemctl restart php8.1-fpm(不是php-fpm) - 扩展兼容性:某些扩展(如
redis、grpc)需重新编译或降级 PECL 包,否则php -m会报undefined symbol
最易被忽略的是 opcache 和 session.save_path 权限——旧版 PHP 进程用户(如 www-data)可能没权限读写新版留下的缓存目录,得手动 chown 或清空 /var/lib/php/sessions。











