不能直接升级,需手动添加Ondřej Surý PPA源、彻底卸载PHP 7.4残留、安装PHP 8.1及扩展,并适配Web服务器配置与代码兼容性。

直接升级 PHP 7.4 到 8.1 在 Ubuntu 20.04 上不能靠 apt upgrade 自动完成,因为系统默认源只提供 PHP 7.4。必须手动切换到支持 8.1 的第三方源,并彻底清理旧环境,否则容易出现服务冲突、配置残留或白屏问题。
停服务并彻底卸载 PHP 7.4
残留的 php-fpm 进程、模块或配置文件会干扰新版本加载,必须清干净:停止运行中的服务:
sudo systemctl stop php7.4-fpm nginx apache2(按你实际用的 Web 服务器选)
禁用开机自启:
sudo systemctl disable php7.4-fpm
杀掉所有相关进程:
sudo pkill -f "php.*fpm"
卸载全部 PHP 7.4 包(含配置):
sudo apt purge php7.4\* libapache2-mod-php7.4 && sudo apt autoremove -y
删除残留目录:
sudo rm -rf /etc/php/7.4 /var/log/php7.4* /usr/lib/php/7.4
添加 Ondřej Surý 的 PHP PPA 源
Ubuntu 20.04 官方仓库不包含 PHP 8.1,这个 PPA 是目前最稳定、更新及时的来源,其中 `php8.1` 包当前指向 8.1.27(2026年10月最新小版本):安装基础工具:
sudo apt install -y software-properties-common ca-certificates apt-transport-https
添加源并更新:
sudo add-apt-repository ppa:ondrej/php && sudo apt update
验证是否生效:
apt policy php8.1 —— 输出应显示来自 ppa.launchpad.net/ondrej/php
安装 PHP 8.1 及关键扩展
不要装 `php` 元包,它会混入旧模块;明确指定版本和所需扩展:一键安装核心与常用扩展:
sudo apt install -y php8.1 php8.1-cli php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-xml php8.1-zip php8.1-opcache php8.1-bcmath php8.1-intl php8.1-gd php8.1-curl
Apache 用户启用模块:
sudo a2dismod php7.4 && sudo a2enmod php8.1 && sudo systemctl restart apache2
Nginx 用户检查 fastcgi_pass:
确认站点配置中指向 fastcgi_pass unix:/run/php/php8.1-fpm.sock;(路径可用 ls /run/php/ 核对)
验证运行状态与基础兼容性
装完只是开始,必须确认 CLI 和 FPM 都跑起来了,且没有致命语法错误:检查 CLI 版本:
php -v → 应显示 PHP 8.1.27
确认 FPM 正常运行:
sudo systemctl status php8.1-fpm → 状态为 active (running)
检查 error_reporting 设置是否合理(默认已开启严格报错)
注意:PHP 8.1 已移除 create_function(),需替换为匿名函数;mb_strpos() 第三个参数类型变为 int,传 string 会报 TypeError;mcrypt 和 apcu-bc 扩展需手动禁用或替换



















