Debian 上 PHP 降级的推荐做法
一 准备与版本确认
dpkg -l | grep php | tee php-packages-before.txttar czf php-conf-$(date +%F).tgz /etc/php /etc/apache2/mods-available /etc/php/*/fpm /etc/nginx/sites-availablephp -v、php -mapache2ctl -M | grep php;FPM:systemctl status php*-fpm二 降级方案总览
| 场景 | 推荐做法 | 关键命令示例 |
|---|---|---|
| 多版本并存,仅切换默认 CLI | 使用 update-alternatives 设置默认 php | sudo update-alternatives --config php |
| Apache 模块方式 | 禁用高版本模块,启用低版本模块,重启 Apache | sudo a2dismod php8.2 && sudo a2enmod php7.4 && sudo systemctl restart apache2 |
| PHP-FPM + Nginx/Apache | 安装低版本 FPM,切换 socket 指向,重启 FPM 与 Web | sudo a2enmod proxy_fcgi setenvif && sudo a2enconf php7.4-fpm && sudo systemctl restart php7.4-fpm apache2 |
| 必须“降级”到仓库不存在的旧版本 | 使用 apt pinning 锁定低版本源优先 | 见下文“版本钉住” |
说明:在 Debian 10 Buster 等系统上,常见做法是先添加 Ondřej Surý 的 PHP 仓库,安装多个 PHP 版本,然后通过 alternatives 与 a2enmod/a2dismod 在版本间切换;CLI 用 alternatives,Apache 模块用 a2enmod/a2dismod,FPM 则切换站点配置中的 socket 并重启服务。
三 分步操作示例
示例一 Apache 模块方式(从 8.2 降到 7.4)
sudo apt install libapache2-mod-php7.4sudo a2dismod php8.2 && sudo a2enmod php7.4sudo systemctl restart apache2php -v(若仍为 8.2,见下一节“CLI 与 FPM 一致性”)示例二 PHP-FPM + Nginx(从 8.2 降到 7.4)
sudo apt install php7.4-fpmsudo a2enmod proxy_fcgi setenvif && sudo a2enconf php7.4-fpmsudo systemctl reload nginxsudo systemctl reload apache2sudo systemctl restart php7.4-fpmcurl -I http://localhost/info.php 或 php-fpm7.4 -v示例三 CLI 与 FPM 一致性
sudo update-alternatives --config php(选择 /usr/bin/php7.4)sudo update-alternatives --set php /usr/bin/php7.4php -v 与 php-fpm7.4 -v 输出应一致为目标版本四 版本钉住与回滚(当仓库仅保留高版本时)
sudo apt update && apt-cache policy php5.6sudo tee /etc/apt/preferences.d/php-downgrade <<'EOF'Package: php5.6*
Pin: release a=bullseye
Pin-Priority: 991
Package: php7.4*
Pin: release a=bullseye
Pin-Priority: 500
EOF`
sudo apt install php5.6 php5.6-cli php5.6-fpm(按需增减模块)php -v、php-fpm5.6 -v、apache2ctl -M | grep phpapt purge php8.2*。五 验证与回滚
php -v、php -m/var/www/html/info.php 内容为 <?php phpinfo(); ?>,访问确认版本与模块systemctl status php*.fpm、ss -lntp | grep phpapache2ctl -M | grep phpsudo a2dismod php7.4 && sudo a2enmod php8.2 && sudo systemctl restart apache2 php8.2-fpmsudo update-alternatives --set php /usr/bin/php8.2/etc/apt/preferences.d/php-downgrade 并 sudo apt update以上步骤覆盖了 CLI、Apache 模块、PHP-FPM 三种常见部署的降级路径,并提供了在仓库无旧版本时的 版本钉住 方案。操作前务必完成配置与数据的备份,并在灰度环境验证后再切换到生产。