编程

如何在 Debian/Ubuntu 上安装 PHP 8.2

1200 2022-11-24 17:55:37

PHP 8.2 带来了许多新特性,比如只读类、新的 random 扩展、敏感参数去敏以及语言上的一些精简如动态熟悉的弃用及字符串解析相关弃用。

注意: PHP 8.2 还没有正式发布
PHP 8.2 原计划在 11 月24日发布。后又改期到12月8日。对于生产环境,建议等正式版发布再行更新。

目前,Debain 和 Ubuntu 的软件仓库还没有提供正式的 PHP 8.2 软件包,不过可以从由 Ondřej Surý 维护的仓库可以获得。Ondrej的存储库是主要的、最新的存储库,为基于Debian和Ubuntu的操作系统提供PHP包和PECL扩展。

PHP 8.2 有哪些新增特性和更改

PHP 8.2为安全和性能带来了一个健康的新特性列表,以及一些可能会在现有旧版本上发出额外警告的弃用,因为它弃用了动态属性以及其他一些弃用。

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

PHP的INI设置和文件中的一个显著变化是,PHP 8.2在旧版本中禁用了格式错误的INI时发出警告。有关详细信息,请参阅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
# OR
# sudo apt install libapache2-mod-php8.2

sudo a2enconf php8.2-fpm

# When upgrading from older PHP version:
sudo a2disconf php8.1-fpm

## Remove old packages
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
# OR
# sudo apt install libapache2-mod-php8.2

sudo a2enconf php8.2-fpm

# When upgrading from older PHP version:
sudo a2disconf php8.1-fpm

## Remove old packages
sudo apt purge php8.1*

详细教程

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

以下命令列出了当前系统中存在的所有与PHP相关的包,并将它们保存到名为packages.txt的文本文件中。这有助于在PHP8.2上重建相同的包列表。

在新安装时,不需要执行此步骤。

dpkg -l | grep php | tee packages.txt

2. 添加 ondrej/php PPA 作为软件仓库.

Ondžej Surý 维护的存储库包含主要的PHP包,并保持着更新。

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

Ubuntu LTS Versions

sudo add-apt-repository ppa:ondrej/php # Press enter when prompted.
sudo apt update

Debian

sudo apt install apt-transport-https lsb-release ca-certificates ```
software-properties-common
sudo add-apt-repository ppa:ondrej/php # Press enter when prompted.
sudo apt update

3. 安装 PHP 8.2 及其扩展

步骤2中添加的存储库中的所有PHP 8.2包都遵循php8.2命名模式。PHP中的捆绑扩展,如json、ctype、date、random等,不需要手动安装。

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

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

展开上面的大括号,以包括新系统上所需的所有扩展。当升级现有的PHP设置时。txt文件应该列出所有当前的PHP包。

4. 安装和启用服务器 APIs

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

Apache web 服务器 + PHP-FPM

sudo apt install php8.2-fpm
sudo a2enconf php8.2-fpm
sudo a2disconf php8.1-fpm # When upgrading from an older PHP version
sudo service apache2 restart

Apache web 服务器 + PHP 作为 Apha 模块
不建议将PHP安装为Apache模块,除非边缘用例需要这样做。

sudo apt install libapache2-mod-php8.2
sudo a2enmod php8.2
sudo a2dismod php8.1 # When upgrading from an older PHP version
sudo service apache2 restart

Nginx web 服务器 + PHP-FPM

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

然后,编辑相关的Nginx配置文件以指向fastcgi_pass指令中的新PHP socket:

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

5. 测试 PHP 8.2 安装

运行下面命令进行测试:

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/pphp8.0、/usr/bin/PHP 7.4等)。默认情况下,默认php名称将符号链接到最新的php版本,但可以更改默认php命令链接到的位置。

如果有多个PHP版本链接到同一PHP路径,updatealternates命令提供了一种在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