ubuntu 22.04 上可稳定共存 php 8.1 与 8.2,需分别安装隔离、用 update-alternatives 管理 cli 切换、为 nginx/apache 显式绑定对应 fpm 实例,二者路径与服务完全解耦,互不干扰。

在 Ubuntu 上实现 PHP 8.1 与 PHP 8.2 多版本共存,核心是“安装隔离 + 切换分离 + 服务解耦”——命令行(CLI)和 Web 服务(FPM)必须分别配置,不能只改一个就以为全系统切换成功。
安装两个版本(以 Ubuntu 22.04 为例)
Ubuntu 官方源不提供 PHP 8.2,必须添加第三方 PPA:
- 先装基础工具:sudo apt install -y software-properties-common
- 添加 Ondřej PHP 源:sudo add-apt-repository ppa:ondrej/php
- 更新索引:sudo apt update
- 安装 PHP 8.1 和 8.2(含 CLI 与 FPM):
sudo apt install php8.1-cli php8.1-fpm php8.1-mysql php8.1-curl php8.1-xml php8.1-mbstring
sudo apt install php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl php8.2-xml php8.2-mbstring
安装完成后,用 ls /usr/bin/php* 可看到 php8.1 和 php8.2 两个独立二进制文件,路径互不干扰。
用 update-alternatives 管理 CLI 默认版本
这是最安全的系统级 CLI 切换方式,支持统一管理 php、phpize、php-config:
- 注册两个版本:
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.1 81
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.2 82 - 交互式切换:sudo update-alternatives --config php,输入编号选择
- 验证:php -v 和 which php 应一致显示所选版本
注意:该操作只影响终端命令行,不影响任何 Web 服务。
为 Nginx 或 Apache 分别绑定对应 FPM 实例
Web 请求走的是 FPM 进程,不是 CLI。每个版本需独立运行自己的 php-fpm 服务,并由 Web 服务器显式指向。
-
Nginx 用户:编辑站点配置,在
location ~ \.php$块中指定 socket:fastcgi_pass unix:/run/php/php8.1-fpm.sock;或fastcgi_pass unix:/run/php/php8.2-fpm.sock; -
Apache 用户:禁用旧模块,启用新模块:
sudo a2dismod php8.1 && sudo a2enmod php8.2 && sudo systemctl restart apache2 - 确保对应 FPM 服务已启用并运行:
sudo systemctl enable --now php8.1-fpm
sudo systemctl enable --now php8.2-fpm
可同时运行两个 FPM 服务,它们监听不同 socket(如 /run/php/php8.1-fpm.sock 和 /run/php/php8.2-fpm.sock),完全隔离。
确认各环境实际使用的版本
务必分场景验证,避免误判:
-
CLI:执行 php -v,再运行 php --ini 查看加载的
php.ini路径(如/etc/php/8.2/cli/php.ini) -
Web(Nginx):在网站根目录放
info.php(内容<?php phpinfo(); ?>),访问后查看 “PHP Version” 和 “Loaded Configuration File”(应为/etc/php/8.2/fpm/php.ini) -
扩展是否生效:FPM 的扩展必须带版本号安装(如
php8.2-mysql),php-mysql会装到默认版本,极易出错
只要 CLI 和 FPM 配置路径不混用、socket 不写错、服务都 running,两个版本就能长期稳定共存,互不覆盖。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











