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 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 服务器集成部分,了解稍后所需的其他步骤。
检查安装
要快速检查 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
来源:开源技术小栈