ubuntu升级php到8.1不能靠apt upgrade自动完成:20.04需添加ondrej/php ppa、彻底卸载php7.4残留并重装8.1及扩展;22.04+可直接apt安装,但须启用服务、验证扩展及检查create_function()等兼容性问题。

Ubuntu 系统升级 PHP 到 8.1 版本,不能靠 apt upgrade 自动完成,必须根据系统版本选择合适路径:Ubuntu 20.04 需手动添加第三方源并彻底清理旧版;Ubuntu 22.04 及更新版本则可直接安装,无需额外配置源。
Ubuntu 20.04:必须添加 PPA 并清理残留
系统默认只提供 PHP 7.4,官方仓库不包含 8.1。跳过清理会导致服务冲突、白屏或扩展加载失败。
- 先停服务并卸载 PHP 7.4 全量包:
sudo systemctl stop php7.4-fpm nginx apache2sudo systemctl disable php7.4-fpmsudo pkill -f "php.*fpm"sudo apt purge php7.4\* libapache2-mod-php7.4 && sudo apt autoremove -ysudo rm -rf /etc/php/7.4 /var/log/php7.4* /usr/lib/php/7.4 - 添加 Ondřej Surý 的稳定 PPA:
sudo apt install -y software-properties-common ca-certificates apt-transport-httpssudo add-apt-repository ppa:ondrej/php && sudo apt update
运行apt policy php8.1确认输出含ppa.launchpad.net/ondrej/php - 安装 PHP 8.1 及常用扩展:
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 - 对接 Web 服务器:
Apache 用户执行sudo a2dismod php7.4 && sudo a2enmod php8.1 && sudo systemctl restart apache2
Nginx 用户检查站点配置中fastcgi_pass是否指向unix:/run/php/php8.1-fpm.sock
Ubuntu 22.04+:直接安装即可,无需加源
系统原生支持 PHP 8.1,安装过程简洁,但需注意扩展启用与服务状态确认。
- 更新并安装核心组件:
sudo apt updatesudo apt install -y php8.1 php8.1-cli php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip php8.1-bcmath php8.1-opcache
如用 Apache,额外运行sudo apt install libapache2-mod-php8.1 - 启用并验证 FPM:
sudo systemctl start php8.1-fpmsudo systemctl enable php8.1-fpmsudo systemctl status php8.1-fpm(应显示 active (running))
确认套接字存在:ls /run/php/php8.1-fpm.sock - 检查扩展是否生效:
php8.1 -m | grep -E "(mysql|opcache|gd)"
或新建/var/www/html/info.php,写入<?php phpinfo(); ?>,浏览器访问确认版本和模块列表
升级后必须做的兼容性检查
PHP 8.1 引入了严格类型、弃用函数及语法变更,仅版本升级不等于应用可用。
- CLI 和 FPM 的
error_reporting默认值不同,建议统一检查配置:php --ini与php-fpm -t查看实际加载的php.ini路径 - 关键废弃项:已移除
create_function(),需替换为匿名函数;mb_ereg_*系列函数被标记为废弃 - 运行简单测试脚本:
php -r "echo 'PHP 8.1 OK'; echo PHP_VERSION_ID >= 80100 ? ' ✅' : ' ❌';" - 若项目使用 Composer,运行
composer update并检查composer.json中"php": "^8.1"是否匹配
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











