Ubuntu、Debian 安装升级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 核心到 PECL 的四个 PHP 扩展。这可能会影响现有的 PHP 应用程序发出额外的 PHP 通知/警告,或者在某些情况下失败。

可能影响现有应用程序的一些显著更改包括:

  • 已弃用隐式可为 null 的参数声明
  • E_STRICT 常量已弃用
  • 从 PHP 核心迁移到 PECL 的扩展:Pspell、IMAP、OCI8 和 PDO_OCI。

当 PHP 扩展从 PHP 核心移动到 PECL 时,该扩展将遵循自己的发布周期。如果该扩展的 PECL 项目发布更新,则指南中使用的存储库将为他们提供更新。然而,这也意味着 PECL 扩展可能会(而且经常)在维护方面落后。

在继续之前,请确保备份系统。本指南将 PHP 8.4 与任何现有的 PHP 安装一起并排安装,这提供了一种在必要时切换回其他 PHP 安装的简便方法。

列出现有的 PHP 软件包

此步骤仅在升级现有 PHP 设置时适用。以下命令列出所有已安装的 PHP 包,其名称中带有文本php,在屏幕上显示它,并将其写入名为packages.txt的文件中。在稍后的步骤中安装 PHP 8.4 软件包时,此文件会派上用场,以确保安装的 PHP 8.4 版本的扩展列表相同。

dpkg -l | grep php | tee packages.txt

添加 ondrej/php PPA/DPA

由于 PHP 8.4 软件包在当前的任何 Debian 或 Ubuntu 软件存储库中都不可用,因此 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 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

安装 PHP 8.4 Server API 软件包

在 Ondrej 的 PPA 和 DPA 中,PHP 8.4 软件包遵循php8.1-NAME模式。PECL 和共享的 PHP 扩展也遵循相同的模式。

在安装 PHP 扩展之前,请确保安装以下 PHP 服务器 API (SAPI) 软件包之一:

仅安装 PHP-CLI

sudo apt install php8.4-cli

PHP-CLI 和 PHP 作为 Apache 模块

要将 PHP CLIPHP 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 服务器集成部分,了解稍后所需的其他步骤。

检查安装

要快速检查 PHP 安装,请运行以下命令:

php -v

它应该显示 PHP 版本、构建时间和更多信息:

图片

如果安装了 PHP-FPM 服务,则可以按如下方式检查其状态:

sudo systemctl status php8.4-fpm

如果 PHP-FPM 服务器成功运行,它应该显示类似于下面的输出:

图片

安装 PHP 扩展

所有共享的 PHP 扩展和 PECL 扩展都遵循php8.4-EXTNAME模式,其中extname是扩展的名称。

升级现有系统时,请参阅第一步中创建的packages.txt文件,以检查现有的 PHP 8.3 或更早的 PHP 扩展。

要安装 PHP 扩展,请使用apt install命令,其中 PHP 扩展名称带有php-8.4-前缀。例如,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

Web 服务器集成

根据安装的服务器 API,Web服务器集成可能需要额外的配置才能使 PHP 8.4 升级生效。

PHP-FPM

当使用 PHP-FPM 时(通过安装 php8.4-fpm 软件包),需要重新配置 web 服务器,通过更新的套接字路径与 PHP 8.4 FPM 服务器通信。

Apache:通过打开 PHP 8.4 配置文件,可以很容易地进行配置更改:

sudo a2enconf php8.4-fpm

Nginx:将fastcgi_pass指令从旧的 PHP FPM 套接字路径更新到新的 PHP 8.4 路径:

- fastcgi_pass unix:/run/php/php8.3-fpm.sock;
+ fastcgi_pass unix:/run/php/php8.4-fpm.sock; 

Caddy 服务器:更新reverse_proxy指令以使用新的 PHP 8.4 FPM 服务器套接字路径:

- reverse_proxy @phpFiles unix//run/php/php8.3-fpm.sock
+ reverse_proxy @phpFiles unix//run/php/php8.4-fpm.sock

迁移配置

新 PHP 设置的配置文件位于/etc/php/8.4目录下。现有的 PHP 安装可能安装在/etc/php/VERSION目录中。

如果需要,可以从较旧的 PHP 版本复制配置。配置复制现有文件。相反,请考虑检查两个php.ini文件之间的差异并更新 PHP 8.4php.ini文件。

例如,以下命令将 PHP 8.4 CLIphp.ini与 PHP 8.4 进行比较:

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 运行器池配置。

清除旧的 PHP 版本

在确认新的 PHP CLI(以及可选的 Web 服务器集成)正常工作后,如果不再需要旧 PHP 版本的软件包和服务,则可以将其删除。

sudo apt purge '^php8.3.*'

上面的示例显示了一个通配符匹配所有 PHP 8.3 软件包的apt purge命令。

将 PHP 8.4 与其他 PHP 版本一起运行

如果需要,上述步骤中提到的 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

来源:开源技术小栈

THE END