PHP 8.4 带来了多项新功能、安全性改进和性能提升,同时也伴随着大量的功能弃用和移除。
本指南介绍如何在 Ubuntu、Debian 或其衍生发行版上安装 PHP 8.4 或升级到 PHP 8.4。虽然可以从源码编译 PHP,但如下文所述,从 APT 仓库安装通常更快且更安全,因为这些仓库未来会提供最新的 bug 修复和安全更新。
当前的 Debian 和 Ubuntu 软件仓库中不提供 PHP 8.4。本指南使用由 Ondřej Surý 维护的仓库。多年来,Ondrej 的 PHP 仓库一直是 Ubuntu、Debian 及其衍生发行版上 PHP 的事实标准仓库。
PHP 8.4 中潜在的向后兼容性影响
PHP 8.4 引入了多项新功能,例如属性钩子(property hooks)、非对称可见性(asymmetric visibility),以及 DOM、Curl、PCRE 扩展的改进等。
然而,PHP 8.4 也弃用了某些 PHP 功能,并将四个 PHP 扩展从 PHP 核心移至 PECL。这可能导致现有的 PHP 应用程序发出额外的 PHP 通知/警告,或在特定条件下失败。
一些可能影响现有应用的显著变更包括:
- 隐式可空参数声明已被弃用
E_STRICT常量已被弃用- 扩展从 PHP 核心移至 PECL:Pspell, IMAP, OCI8, 和 PDO_OCI。
当 PHP 扩展从 PHP 核心移至 PECL 时,该扩展将遵循其自身的发布周期。如果该扩展的 PECL 项目发布了更新,本指南中使用的仓库也会提供相应的更新。但这同时也意味着 PECL 扩展可能会(并且经常确实)在维护上滞后。
在继续之前,请确保备份系统。本指南将 PHP 8.4 与任何现有的 PHP 安装并行安装,这提供了一种轻松的方式,以便在必要时切换回其他 PHP 安装。
1. 列出现有的 PHP 包
此步骤仅适用于升级现有的 PHP 设置。以下命令列出所有名称中包含文本 php 的已安装 PHP 包,将其显示在屏幕上,并写入名为 packages.txt 的文件。在后续安装 PHP 8.4 包时,此文件非常有用,以确保安装相同列表中的 PHP 8.4 版本的扩展。
dpkg -l | grep php | tee packages.txt2. 添加 ondrej/php PPA/DPA
由于当前的 Debian 或 Ubuntu 软件仓库中不提供 PHP 8.4 包,因此必须从另一个仓库获取 PHP 包。
Ondřej Surý 维护了一个包含所有当前 PHP 版本编译二进制文件的包归档库,适用于 Ubuntu 和 Debian。它还提供了多个 PECL 扩展,包括 PHP 8.4 中从核心解绑的 PHP 核心扩展对应的 PECL 扩展。
一旦添加了此仓库,初始安装和更新即可通过标准的 apt 命令完成。
Ubuntu PPA
sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php # Press enter to confirm.
sudo apt updateDebian DPA
sudo apt-get update
sudo apt-get -y install lsb-release ca-certificates curl apt-transport-https
sudo curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt-get update3. 安装 PHP 8.4 Server API 包
在 Ondrej 的 PPA 和 DPA 中,PHP 8.4 包遵循 php8.1-NAME 模式。PECL 和共享 PHP 扩展也遵循相同的模式。
在安装 PHP 扩展之前,请务必先安装以下 PHP Server API (SAPI) 包之一:
仅安装 PHP-CLI
要安装 PHP CLI,请安装 php8.1-cli 包,以及所需的扩展。
sudo apt install php8.4-cliPHP-CLI 和作为 Apache 模块的 PHP
要同时安装 PHP CLI 和 作为 Apache 模块的 PHP 8.4,请安装 libapache2-mod-php8.4 包:
sudo apt install php8.4-cli libapache2-mod-php8.4除非 PHP 应用程序要求将 PHP 安装为 Apache 模块,否则建议考虑安装 PHP-FPM。
PHP CLI 和 PHP-FPM(推荐)
建议安装 PHP-FPM 以将 PHP 与 Web 服务器(如 Apache、Nginx 和 Caddy)集成。
sudo apt install php8.4-cli php8.4-fpm这会安装 php8.4-fpm 服务并自动启用它。请参阅后文的 FPM Web 服务器集成部分以了解所需的其他步骤。
5. 检查安装
要快速检查 PHP 安装情况,请运行以下命令:
php -v它应显示 PHP 版本、构建时间及其他信息:

如果安装了 PHP-FPM 服务,可以通过以下方式检查其状态:
sudo systemctl status php8.4-fpm如果 PHP-FPM 服务器成功运行,应显示类似以下的输出:

4. 安装 PHP 扩展
所有共享 PHP 扩展和 PECL 扩展都遵循 php8.4-EXTNAME 模式,其中 extname 是扩展的名称。
在升级现有系统时,请参考第一步中创建的 packages.txt 文件,以检查现有的 PHP 8.3 或更早版本的 PHP 扩展。
要安装 PHP 扩展,请使用带有 php-8.4- 前缀的 PHP 扩展名称执行 apt install 命令。例如,gd 扩展通过 php8.4-gd 包安装:
sudo apt install php8.4-gd以下命令安装大多数 PHP 库和框架所需的一组最常见的 PHP 扩展:
sudo apt install php8.4-common php8.4-{bcmath,bz2,curl,gd,gmp,intl,mbstring,opcache,readline,xml,zip}要搜索其他 PHP 扩展,请使用 apt search 命令:
apt search php8.4开发工具
Xdebug 和代码覆盖率工具等开发工具也可以按照相同的包命名约定进行安装。
在生产服务器上不推荐执行此步骤。
Xdebug
sudo apt install php8.4-xdebugPCOV
sudo apt install php8.4-pcov5. Web 服务器集成
根据第 3 步中安装的服务器 API,Web 服务器集成可能需要额外的配置才能使 PHP 8.4 升级生效。
PHP-FPM
当使用 PHP-FPM(通过安装 php8.4-fpm 包)时,需要重新配置 Web 服务器,以便通过更新后的 socket 路径与 PHP 8.4 FPM 服务器通信。
Apache:通过启用 PHP 8.4 配置文件可以轻松完成此配置更改:
sudo a2enconf php8.4-fpmNginx:将 fastcgi_pass 指令从旧的 PHP FPM socket 路径更新为新的 PHP 8.4 路径:
- fastcgi_pass unix:/run/php/php8.3-fpm.sock;
+ fastcgi_pass unix:/run/php/php8.4-fpm.sock; 更多信息请参阅 Nginx 文档
Caddy Server:更新 reverse_proxy 指令以使用新的 PHP 8.4 FPM 服务器 socket 路径:
- reverse_proxy @phpFiles unix//run/php/php8.3-fpm.sock
+ reverse_proxy @phpFiles unix//run/php/php8.4-fpm.sock有关更多配置详情,请参阅《如何将 Caddy Server 与 PHP 配合使用》。
作为 Apache 模块的 PHP
如果 PHP 是作为 Apache 模块安装的,以下命令将禁用之前的 PHP 模块(在此示例中为 8.3)并启用新的 PHP 版本:
sudo a2dismod php8.3 # Change to the current PHP version
sudo a2enmod php8.4迁移配置
新 PHP 设置的配置文件将位于 /etc/php/8.4 目录中。现有的 PHP 安装很可能位于 /etc/php/VERSION 目录中。
如果需要,可以从较旧的 PHP 版本复制配置。不建议直接覆盖现有文件。相反,应考虑比较两个 php.ini 文件之间的差异,并相应地更新 PHP 8.4 的 php.ini 文件。
例如,以下命令比较 PHP 8.4 CLI php.ini 与 PHP 8.3 的配置:
diff /etc/php/8.3/cli/php.ini /etc/php/8.4/cli/php.ini使用 PHP-FPM 时,请务必更新 /etc/php/8.4/fpm/pool.d/www.conf 文件,以匹配旧版 PHP-FPM runner pool 的配置。
清除旧版 PHP
在确认新的 PHP CLI(以及可选的 Web 服务器集成)正常工作后,如果不再需要旧版 PHP 的软件包和服务,可以将其移除。
sudo apt purge '^php8.3.*'上面的示例展示了一个 apt purge 命令,它使用通配符匹配所有 PHP 8.3 软件包。
与其他 PHP 版本并行运行 PHP 8.4
如果需要,上述步骤中提到的 PHP 8.4 安装可以与其他 PHP 版本共存。
安装 PHP 8.4 CLI 时,它将安装在 /usr/bin/php8.4。其他 PHP 版本将安装在相同位置,并带有版本号后缀(例如,PHP 8.3 位于 /usr/bin/php8.3)。可以通过直接调用此路径来调用其他 PHP CLI 版本。
默认情况下,php 命令名会符号链接到最新的 PHP 版本。但是,使用 update-alternatives 命令,可以将其更改为任何其他 PHP 版本:
sudo update-alternatives --config php这会打开一个交互式界面,以选择 php 指向的替代 PHP 二进制文件路径:
There are 2 choices for the alternative php (providing /usr/bin/php).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/php8.4 84 auto mode
1 /usr/bin/php8.3 83 manual mode
2 /usr/bin/php8.4 84 manual mode若要在没有交互式提示的情况下设置路径:
update-alternatives --set php /usr/bin/php8.4