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/php
PPA 作为软件存储库。
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 中的捆绑扩展,例如json
, ctype
, date
,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