在 Ubuntu 和 Debian 中安装和升级 PHP 8.4
PHP 8.4 带来了几个新特性、安全性改进和性能改进,并有大量的特性弃用和删除。
本指南解释了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4。虽然可以从源代码编译 PHP,但如下所述从 APT 存储库安装它通常更快、更安全,因为这些存储库将在未来提供最新的错误修复和安全更新。
PHP 8.4 在当前的 Debian 和 Ubuntu 软件库中不可用。本指南使用 Ondřej Surý维护的存储库。Ondrej 的 PHP 存储库多年来一直是 Ubuntu、Debian 及其衍生版本上 PHP 的事实存储库。
PHP 8.4 中的潜在向后兼容性影响
PHP 8.4 带来了几个新特性,如属性挂钩、非对称可见性、DOM、Curl、PCRE 扩展的改进等。
然而,PHP 8.4 也弃用了一些 PHP 功能,并从 PHP 核心移除了四个 PHP 扩展到 PECL。这可能会影响现有的 PHP 应用发出额外的 PHP 通知/警告,或在某些情况下失败。
一些可能影响现有应用的显著变化包括:
- 隐式 nullable 参数声明弃用
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.txt
2. 添加 ondrej/php
PPA/DPA
由于 PHP 8.4 软件包在当前的 Debian 或 Ubuntu 软件存储库中都不可用,因此 PHP 软件包必须来自另一个存储库。
Ondřej Surý 维护着一个包归档,其中包含 Ubuntu 和 Debian 的所有当前 PHP 版本的编译二进制文件。它还提供了几个 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 update
Debian 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 update
3. 安装 PHP 8.4 服务器 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-cli
作为 Apache 模块的 PHP-CLI 和 PHP
要将 PHP CLI 和 PHP 8.4 作为 Apache 模块安装,请安装 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 与 Apache、Nginx 和 Caddy 等 web 服务器集成。
sudo apt install php8.4-cli php8.4-fpm
这将安装 php8.4-fpm
服务并自动启用它。有关稍后所需的其他步骤,请参阅 FPM web 服务器集成部分。
5. 检测安装
要快速检查 PHP 安装,请运行以下命令:
php -v
这应该会显示 PHP 版本、编译时间及更多信息:
`php -v` 输出
安装 PHP-FPM 服务后,其状态可以按如下方式检测:
sudo systemctl status php8.4-fpm
如果 PHP-FPM 服务运行成功,会输出类似以下的内容:
`systemctl status php8.4-fpm` 输出
4. 安装 PHP 扩展
所有共享的 PHP 扩展和 PECL 扩展都遵循 php8.4-EXTNAME
模式,其中 extname
是扩展的名称。
升级现有系统时,请参阅第一步中创建的 packages.txt
文件,以检查现有的 PHP 8.3 或更早的 PHP 扩展。
要安装 PHP 扩展,请使用 apt install
命令,并使用前缀为 php-8.4-
的 PHP 扩展名。例如,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-xdebug
PCOV
sudo apt install php8.4-xdebug
5. 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-fpm
Nginx: 更新 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 server socket 路径:
- reverse_proxy @phpFiles unix//run/php/php8.3-fpm.sock
+ reverse_proxy @phpFiles unix//run/php/php8.4-fpm.sock
PHP 作为 Apache 模块
如果要将 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 8.3 php.ini
进行比较:
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 池配置。
清除旧版 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 版本将安装在具有版本名称后缀的同一位置(例如,位于 /usr/bin/php8.3
的 PHP 8.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