如何在 Debian、Ubuntu 和其他基于 Ubuntu 的系统上安装 PHP 8.2
PHP 8.2带来了主要的新特性,例如只读类、新random扩展敏感参数编辑以及语言简化更改,包括动态属性的弃用和字符串插值相关的弃用。

注意:PHP 8.2 尚未达到 GA 版本,但
PHP 8.2 计划于 11 月 24 日发布。当第一个稳定的 PHP 8.2 版本发布时,此通知将被删除。在此之前,本指南的其余部分将安装 PHP 8.2 的最新候选版本。对于生产服务器,建议等到 GA 发布。

目前,Debian 或 Ubuntu 的默认软件存储库中不提供 PHP 8.2 软件包,但可以从Ondřej Surý维护的存储库中获得 PHP 8.2 软件包。Ondrej 的存储库是主要和最新的存储库,为基于 Debian 和 Ubuntu 的操作系统提供 PHP 包和 PECL 扩展,并用于所有 PHP.Watch 指南,用于在这些系统上安装 PHP。

PHP 8.2 的新变化

PHP 8.2 带来了一个健康的安全和性能新特性列表,以及一些可能对现有遗留系统发出额外警告的弃用,因为它弃用了动态属性,以及其他一些弃用。

有关 PHP 8.2 中新功能和更改的完整列表,请参阅PHP 8.2:新功能和更改

显着的扩展和 INI 变化

PHP 8.2 不包含任何会影响安装或升级过程的显着更改。PHP 8.2 实际上确实添加了一个名为random 的新扩展,但这个扩展始终是一个捆绑扩展,没有它就无法编译 PHP。

PHP 的 INI 设置和文件的一个显着变化是 PHP 8.2 对格式错误的 INI 设置发出警告,这些设置在旧 PHP 版本中被静音。有关详细信息,请参阅PHP 8.2:INI 解析警告


注意:未来潜在的破坏性行动

以下操作以sudo 执行,并且需要该级别的权限才能继续。进行任何系统范围的更改时的常见警告也适用于此处。确保备份系统并在继续之前检查备份。


快速开始

在安装/升级到 PHP 8.2 的命令行命令下方,有关详细步骤,请转到详细安装/升级指南

Ubuntu

sudo dpkg -l | grep php | tee packages.txt
sudo add-apt-repository ppa:ondrej/php # Press enter when prompted.
sudo apt update
sudo apt install php8.2,php8.2-cli,php-8.2{bz2,curl,mbstring,intl}

sudo apt install php8.2-fpm
# 或
# sudo apt install libapache2-mod-php8.2

sudo a2enconf php8.2-fpm

# 当从老的PHP版本升级:
sudo a2disconf php8.1-fpm

## 删除旧包
sudo apt purge php8.1*

Debian

sudo dpkg -l | grep php | tee packages.txt

sudo apt install apt-transport-https lsb-release ca-certificates wget -y
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg 
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update

# Expand the curly braces with all extensions necessary.
sudo apt install php8.2,php8.2-cli,php-8.2{bz2,curl,mbstring,intl}

sudo apt install php8.2-fpm
# 或
# sudo apt install libapache2-mod-php8.2

sudo a2enconf php8.2-fpm

# 当从老的PHP版本升级:
sudo a2disconf php8.1-fpm

## 删除旧包
sudo apt purge php8.1*

详细指南

1.列出并存储PHP扩展列表

以下命令列出当前系统上存在的所有 PHP 相关包,并将它们保存到一个名为packages.txt. 这有助于在 PHP 8.2 上重建相同的包列表。

在全新安装中,此步骤不是必需的。

dpkg -l | grep php | tee packages.txt

2. 添加ondrej/phpPPA 作为软件存储库。

Ondřej Surý维护的存储库包含主要的 PHP 包,并不断更新。

将此存储库添加到系统的软件源列表后,可以使用标准apt命令完成初始安装和更新。

Ubuntu LTS 版本

sudo add-apt-repository ppa:ondrej/php # 出现提示时按回车键.
sudo apt update

Debian

sudo apt install apt-transport-https lsb-release ca-certificates ```
software-properties-common
sudo add-apt-repository ppa:ondrej/php # 出现提示时按回车键.
sudo apt update

3. 安装 PHP 8.2 和扩展

在步骤 #2 中添加的存储库中可用的所有 PHP 8.2 包都遵循php8.2-命名模式。PHP 中的捆绑扩展,例如jsonctypedate,random等不需要手动安装。

php8.2-common软件包包括几个常见的 PHP 软件包。以后可以选择性地禁用不必要的扩展。

sudo apt install php8.2 php8.2-cli php8.2-{curl,bz2,mbstring,intl}

展开上面的花括号以包含新系统上所需的所有扩展。升级现有 PHP 设置时,packages.txt在步骤 #1 中创建的文件应列出所有当前 PHP 包。

4. 安装和启用服务器 API

在 Web 服务器与 PHP 集成的系统上,安装附加的服务器 API 包。以下是最流行组合的一些示例:


带有 PHP-FPM 的 Apache Web 服务器

sudo apt install php8.2-fpm
sudo a2enconf php8.2-fpm
sudo a2disconf php8.1-fpm # 从较旧的 PHP 版本升级时
sudo service apache2 restart

将 PHP 作为 Apache 模块的 Apache Web 服务器
不建议将 PHP 作为 Apache 模块安装,除非边缘用例需要它。

sudo apt install libapache2-mod-php8.2
sudo a2enmod php8.2
sudo a2dismod php8.1 # 从较旧的 PHP 版本升级时
sudo service apache2 restart

带有 PHP-FPM 的 Nginx Web 服务器

sudo apt install php8.2-fpm
sudo service nginx restart

然后,编辑相关的 Nginx 配置文件以指向新的 PHP 套接字 atfastcgi_pass指令:

- fastcgi_pass unix:/run/php/php8.1-fpm.sock;
+ fastcgi_pass unix:/run/php/php8.2-fpm.sock;

5.测试PHP 8.2安装

要测试 PHP CLI 安装,请尝试运行以下命令:

php -v
php -m

预计输出将显示PHP 8.2以及已启用的 PHP 扩展列表。

要测试 Web 服务器集成,请尝试通过 Web 服务器运行 PHP 文件。

6. 清除旧的 PHP 包

以下命令删除较旧的 PHP 版本。建议在验证 PHP 8.2 安装工作正常之前不要删除它们。

sudo apt purge php8.1* # Change "php8.1" with the old PHP version names.

这也会删除要删除的软件包的配置文件。


与其他版本一起运行多个 PHP 8.2

无需全局安装 PHP 8.2 并删除旧 PHP 版本,因为可以在同一台服务器上同时运行多个 PHP 版本。

默认情况下, PHP 8.2 CLI 将安装在该/usr/bin/php8.2位置,但它们是链接的。类似地,其他 PHP 二进制文件将位于同一目录中(/usr/bin/php8.0/usr/bin/php7.4等)。默认php名称将默认符号链接到最新的 PHP 版本,但可以更改默认php命令链接的位置。

update-alternatives如果有多个 PHP 版本链接到同一php路径,该命令提供了一种在 PHP CLI 的 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.2   82        auto mode
  1            /usr/bin/php8.1   81        manual mode
  2            /usr/bin/php8.2   82        manual mode

要在没有交互式提示的情况下设置路径:

update-alternatives --set php /usr/bin/php8.1

如何在 Debian 和 Ubuntu 系统上安装/升级 PHP 8.2
标签: