ubuntu 22.04 默认不提供 php 8.0 是因其严格锁定 php 8.1 为主版本,官方源仅维护 8.1 及对应模块;需添加 ppa:ondrej/php 源才能安装 8.0,并通过 update-alternatives 切换 cli 默认版本,web 服务须单独配置 php8.0-fpm 和 socket 权限。

Ubuntu 22.04 默认源提供的是 PHP 8.1,不带 PHP 8.0;想装 PHP 8.0 必须加第三方源(ppa:ondrej/php),否则 apt install php8.0 会报“无法定位软件包”。
为什么 Ubuntu 22.04 默认没有 php8.0
Ubuntu 发行版对 PHP 主版本做严格锁定:22.04 的生命周期内只维护 PHP 8.1,所有官方仓库、安全更新、Apache/Nginx 集成模块(如 libapache2-mod-php8.1)都围绕 8.1 构建。系统不会回退或并行提供旧主版本——这不是遗漏,而是设计原则。
常见错误现象:sudo apt install php8.0 提示 “E: Unable to locate package php8.0”,不是命令输错,是源里真没有。
- 查当前可用 PHP 包:运行
apt list php*,你会看到只有php8.1及相关扩展 - 想确认系统默认 PHP 版本:执行
php -v(如果已装)或apt show php - 强行从 20.04 源复制 deb 包安装?会导致依赖冲突,
apt会拒绝,且后续apt upgrade极可能崩掉整个 PHP 生态
加 ondrej/php 源后安装 php8.0 的完整步骤
该 PPA 是 Debian/Ubuntu 社区长期维护的权威 PHP 源,支持多版本共存,但需注意它不参与 Ubuntu 官方 LTS 支持周期,更新节奏独立。
操作前先装必要工具:
sudo apt install -y software-properties-common
再添加源并更新:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
sudo add-apt-repository ppa:ondrej/php sudo apt update
此时 apt list php8.0* 就能列出全部 8.0 相关包了。安装核心组件和常用扩展:
sudo apt install -y \ php8.0 \ php8.0-cli \ php8.0-fpm \ php8.0-mysql \ php8.0-curl \ php8.0-mbstring \ php8.0-xml \ php8.0-zip \ php8.0-gd \ php8.0-opcache
-
php8.0-fpm是 Nginx 场景必需;若用 Apache,还需libapache2-mod-php8.0 - 别漏
php8.0-cli,否则php -v仍调用系统默认的 8.1(因为/usr/bin/php是符号链接,指向当前默认版本) - 装完后验证:运行
php8.0 -v(注意不是php -v)
php8.0 和系统默认 php8.1 共存时的切换要点
装多个 PHP 版本后,php 命令本身不会自动切到 8.0;你得手动设置默认版本,否则 Web 服务或 CLI 都可能用错。
切换 CLI 默认版本:
sudo update-alternatives --config php
会列出所有已注册的 PHP 二进制路径(如 /usr/bin/php8.0, /usr/bin/php8.1),选对应编号即可。这会同时更新 php、php-config、phpize 的软链。
- 切换后验证:
php -v应显示 8.0.x - Web 服务不受此影响:Nginx 的
fastcgi_pass或 Apache 的libapache2-mod-php*模块是独立启用的,必须显式配置 - PHP-FPM 服务名是
php8.0-fpm,启动/重启要用sudo systemctl restart php8.0-fpm,不是php-fpm - 配置文件路径为
/etc/php/8.0/fpm/php.ini和/etc/php/8.0/cli/php.ini,别改错目录
容易被忽略的权限与 socket 路径问题
Nginx + php8.0-fpm 组合下,502 错误八成出在 socket 文件权限或路径不一致上,而非 PHP 本身没跑起来。
检查 www.conf 中的关键项:
grep -E "^(listen|user|group|listen.owner|listen.group)" /etc/php/8.0/fpm/pool.d/www.conf
- 推荐用 Unix socket:
listen = /run/php/php8.0-fpm.sock(比 TCP 更快更安全) -
listen.owner和listen.group必须设为www-data(Nginx worker 用户),否则 Nginx 无法 connect - Nginx 配置中
fastcgi_pass必须严格匹配 socket 路径,例如:fastcgi_pass unix:/run/php/php8.0-fpm.sock; - socket 文件由 php8.0-fpm 进程创建,重启服务后才生成;如果
/run/php/下没有该文件,说明php8.0-fpm没真正启动成功(查systemctl status php8.0-fpm)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










