PHP 8.3无法通过Ubuntu/Debian默认源安装,必须添加Ondřej Surý的PPA(支持20.04–24.04)或CentOS/RHEL启用Remi源;安装后需验证php -v、扩展加载及FPM配置,确保CLI与Web模式均就绪。

PHP 8.3 能直接用系统默认源装,但 Ubuntu/Debian 默认仓库里没有 8.3,CentOS/RHEL 8+ 也没有;必须加第三方源或换安装方式,否则装出来是 7.4 或 8.1,框架跑不起来。
Ubuntu/Debian 必须加 Ondřej Surý 的 PPA
系统自带 apt 源不提供 PHP 8.3,硬装 php 只会拉到旧版。Ondřej 的 PPA 是目前最稳定、更新最及时的来源,支持 Ubuntu 20.04~24.04 和 Debian 11~12。
- 先装依赖:
sudo apt install software-properties-common -y - 加源:
sudo add-apt-repository ppa:ondrej/php -y(按回车确认) - 更新索引:
sudo apt update - 装核心包:
sudo apt install php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-curl php8.3-mbstring php8.3-xml php8.3-zip php8.3-gd -y - 验证:
php -v输出应含8.3.x,php -m | grep mbstring确认扩展已加载
常见错误:E: Unable to locate package php8.3 —— 多半是没执行 apt update,或系统版本太老(如 Ubuntu 18.04 已不被该 PPA 支持)。
CentOS/RHEL 8+ 用 EPEL + Remi 源
CentOS Stream 8/9、RHEL 8/9、AlmaLinux、Rocky Linux 都不再维护 PHP 8.3 官方包,Remi 是唯一可靠选择,且支持多版本共存。
立即学习“PHP免费学习笔记(深入)”;
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 启用 EPEL:
sudo dnf install epel-release -y - 启用 Remi:
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y(RHEL 8/CentOS 8)或remi-release-9.rpm(RHEL 9+) - 启用 PHP 8.3 模块:
sudo dnf module reset php && sudo dnf module enable php:remi-8.3 - 安装:
sudo dnf install php php-cli php-fpm php-mysqlnd php-curl php-mbstring php-xml php-zip php-gd -y - 检查版本:
php -v,注意输出中要带(cli)和fpm两行都存在才说明 CLI 和 Web 模式都就绪
容易踩的坑:没运行 dnf module enable 就直接 dnf install php,结果装的是默认的 8.0 或 7.4;另外 php-fpm 服务名是 php-fpm,不是 php83-fpm,启动命令是 sudo systemctl start php-fpm。
Apache vs Nginx:选对 PHP 运行模式
PHP 8.3 不再推荐用 libapache2-mod-php(即 Apache 模块模式),性能差、进程模型僵化;生产环境应统一走 php-fpm + FastCGI,无论 Apache 还是 Nginx。
- Apache:禁用旧模块:
a2dismod php8.2(如有),启用 FPM:sudo a2enconf php8.3-fpm,再确保ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/类似规则已配好 - Nginx:在
server块里写location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; ... },别漏掉SCRIPT_FILENAME,否则 502 或空白页 - 启动顺序关键:
sudo systemctl start php8.3-fpm必须在 Web 服务之前,且php-fpm进程用户(默认www-data或apache)要有项目目录读取权限
典型故障:File not found.(Nginx)或 Primary script unknown(Apache)—— 全是 SCRIPT_FILENAME 路径拼错,不是 PHP 版本问题。
部署后必验的三件事
装完不等于能跑,尤其框架项目(Laravel/ThinkPHP)对环境敏感,光看 php -v 不够。
- 执行
php -i | grep 'Loaded Configuration File',确认读的是你改过的php.ini,不是/etc/php/8.3/cli/php.ini(CLI 配置 ≠ FPM 配置) - 建一个
test.php放进 Web 根目录,内容为<?php phpinfo(); ?>,访问网页,重点核对:Server API是FPM/FastCGI,date.timezone已设(如Asia/Shanghai),short_open_tag按需开启,opcache.enable建议开 - 跑一次
php -m,比对框架文档要求的扩展是否全在列表里,比如 Laravel 10 要ctype、json、openssl、pdo、mbstring、tokenizer、xml、curl—— 少一个,composer install就可能卡住或报错
最常被忽略的一点:FPM 的 www.conf 里 listen.owner 和 listen.group 必须和 Web 服务器运行用户一致(如 Nginx 用 www-data,FPM 就不能只配 nginx),否则 socket 权限拒绝,502 错误无声无息。


















