如何在 Ubuntu 和 Debian 上安装或升级到 PHP8(8.3)

本文将介绍如何在现代 Debian 系统和 Ubuntu 系统上安装 PHP 8。一些最流行的 PECL 扩展也可以用类似的方法安装,它们列在安装 PECL 扩展部分。

PHP 8.3 是 2023 年 PHP 的重大更新。它带来了一些不错的新特性,如类型化类常量、DateTime 扩展中的一组新异常、一个新的 json_validate 函数,以及一些新特性、更改和弃用。一如既往,PHP 8.3 还带来了一些错误修复和改进以及性能提升。

类似的指南还有在 RHEL/Fedora/CentOS Stream/Alma/Rocky Linux 上安装/升级 PHP 8。

 



快速入手

快速启动
以支持 sudo 的用户身份在终端中运行以下 Debian 或 Ubuntu 命令。有关详细步骤,请参阅详细安装/升级指南

Debian (10, 11, and 12)

# Save existing php package list to packages.txt file
sudo dpkg -l | grep php | tee packages.txt

# Add Ondrej's repo source and signing key along with dependencies
sudo apt install apt-transport-https
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
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 update

# Install new PHP 8.3 packages
sudo apt install php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl}

# Install FPM OR Apache module
sudo apt install php8.3-fpm
# OR
# sudo apt install libapache2-mod-php8.3

# On Apache: Enable PHP 8.3 FPM
sudo a2enconf php8.3-fpm
# When upgrading from an older PHP version:
sudo a2disconf php8.2-fpm

# Remove old packages
sudo apt purge php8.2*

Ubuntu (20.04, 22.04, and 24.04)

## Save existing php package list to packages.txt file
sudo dpkg -l | grep php | tee packages.txt

# Add Ondrej's PPA
sudo add-apt-repository ppa:ondrej/php # Press enter when prompted.
sudo apt update

# Install new PHP 8.3 packages
sudo apt install php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl}

# Install FPM OR Apache module
sudo apt install php8.3-fpm
# OR
# sudo apt install libapache2-mod-php8.2

# On Apache: Enable PHP 8.3 FPM
sudo a2enconf php8.3-fpm
# When upgrading from an older PHP version:
sudo a2disconf php8.2-fpm

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

详细安装/升级指南

1. 前提条件

目前的 Debian 和 Ubuntu 版本的默认软件仓库中都不包含 PHP 8.3。预编译的 PHP 包可以从 Ondřej Surý 维护的软件源中获取,本文使用的就是该软件源。该仓库中的软件包与操作系统软件仓库提供的 PHP 软件包采用相同的软件包配置、软件包名称和 systemd 配置。

本文主要针对 Ubuntu 22.04 (Jammy)、Ubuntu 20.04 (Focal)、Ubuntu 24.04 (Noble)、Debian 10 (Buster)、Debian 11 (Bullseye) 和 Debian 12 (Bookworm)。

 

想知道 Ubuntu 或 debian 具体的 linux 发行版本号,使用如下命令:

lsb_release -a

2. 列出并记录现有的 PHP 软件包

升级现有 PHP 版本时,以下命令会列出所有已安装的、包名中包含 php 的软件包,并将其保存到 packages.txt 文件中,同时在终端中打印出来。

这将有助于在接下来的步骤中安装相应的 PHP 8 软件包。

在新系统上安装 PHP 时不需要此步骤。

dpkg -l | grep php | tee packages.txt

3. 添加 ondrej/php repository

目前,PHP 8.3 无法从任何 Debian 或 Ubuntu 软件仓库中下载。由 Ondřej Surý 维护的 Debian 和 Ubuntu 软件仓库包含主要的 PHP 8.3 软件包和几个常用的 PECL 软件包,并且一直保持更新。

在 Ubuntu 上,这些软件包只在 LTS 版本上构建。在 Ubuntu 的非 LTS 版本(如 Ubuntu 22.10)上,此步骤将失败。

以下命令会将软件源添加到软件源列表中,并运行 apt update 从新软件源和现有软件源中获取可用软件包列表。

Debian

sudo apt install apt-transport-https
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
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 update

Ubuntu

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

4. 安装新的 PHP 8 软件包

添加了 Ondrej 的 PHP 代码库后,现在可以用 apt 安装 PHP 软件包了。所有 PHP 8.3 软件包都遵循 php8.3-XYZ 模式。这些名称与操作系统自己的软件仓库提供的 PHP 版本相匹配,并优先于这些版本。

sudo apt install php8.3-common php8.3-cli php8.3-fpm php8.3-{curl,bz2,mbstring,intl}
  • php8.3-common 软件包是一个元软件包,其中安装了多个 PHP 扩展。以后可以有选择地禁用单个扩展。PHP 核心扩展(如 Date、Phar、JSON、ctype 和 random)始终包含在内。没有必要也不可能将它们作为单独的软件包安装。
  • 不安装 php8.3-common,也可以安装单个软件包。安装 php8.3-common 大致相当于安装所有扩展,如下图所示:
    apt install php8.3-{calendar,ctype,exif,ffi,fileinfo,ftp,gettext,iconv,pdo,phar,posix,shmop,sockets,sysvmsg,sysvsem,sysvshm,tokenizer}
  • php8.3-cli 安装 PHP CLI,并将 /usr/bin/php 链接到 /usr/bin/php8.3。更多信息,请参阅 “同时运行 PHP 8.3 和其他版本”。
  • php8.3-fpm 安装了用于网络服务器集成的 PHP FPM SAPI。有关其他方法,请参见web服务器集成。

5. 其它 PHP 扩展

软件仓库中还提供了多个 PECL 扩展,无需编译即可方便地安装。其中包括一些比较流行的 PECL 扩展,如 Image Magick、APCu 和 Xdebug。

以下是一些 PECL 扩展及其软件包名称,可使用 apt install 进行安装。

Extension name Package name
Xdebug php8.3-xdebug
Redis php8.3-redis
PCov php8.3-pcov
Image Magick php8.3-imagick
APCu php8.3-apcu

请注意,这些 PECL 扩展是由个别开发人员/团队开发的,可能没有经过完善的测试。在相应扩展开发的兼容性修复完成之前,这些软件包也可能需要一段时间才能上传。

以下是在 apt 上运行的简单搜索:

sudo apt search php8.3-apcu # Search for "apcu" under PHP 8.3

在步骤 #2 中创建的 packages.txt 文件在这里会派上用场,用来参考现有的 PHP 软件包。

6. Web 服务集成

在大多数使用案例中,PHP 都与网络服务器集成。通过快速 CGI 协议与 PHP-FPM 集成是最常见的方法,但也可以将 PHP 与其他 SAPI 集成。

Apache web server
安装 php8.3-fpm 软件包时,如果有 Apache 网络服务器 (apache2),会出现一个新的 php8.3-fpm.conf 文件,方便切换 PHP 8.3 集成:

sudo a2enconf php8.3-fpm
sudo a2disconf php8.2-fpm # When upgrading from an older PHP version
sudo systemctl restart apache2

当 Apache 被配置为将 PHP 作为 Apache 模块(通常称为 mod_php 或 mod_php8)运行时,请安装 libapache2-mod-php8.3 软件包,而不是 php8.3-fpm:

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

Nginx, Caddy, Litespeed, 和其它 Fast CGI 服务器

php8.3-fpm 安装了 PHP-FPM,并在 /run/php/php8.3-fpm.sock 的套接字地址为 PHP 8.3 FPM 注册了 systemd 服务。

对于通过快速 CGI 与 PHP 集成的 Web 服务器,请将 UNIX 套接字路径更改为该 UNIX 套接字地址。

例如,在 Nginx 上,需要更改 fastcgi_pass 指令:

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

有关使用 Caddy 服务器与 PHP 的详细文章,请参阅如何使用 Caddy 服务器与 PHP。

7. 测试 PHP 8.3 是否安装成功

安装完所有软件包后,就到了检验新安装是否成功的关键时刻。

在终端运行 php -v 应该会显示如下内容:

图0:如何在 Ubuntu 和 Debian 上安装或升级到 PHP8(8.3)

Calling `php -v` displays the PHP version number and build date.

可使用 php -m 列出模块列表。该列表将包括几个捆绑的 PHP 扩展模块。请参阅 “迁移配置”,了解如何将 PHP INI 指令和启用的扩展迁移到新的 PHP 版本。

8. 迁移原 php 版本的修改配置

此步骤仅适用于从旧版本 PHP 升级到 PHP 8.3 时

新安装的 PHP 8.3 的配置文件位于 /etc/php/8.3 目录。现有的 PHP 安装文件也应位于 /etc/php 目录下。

不要将现有的 PHP INI 文件复制到 /etc/php/8.3。而是比较两个相应的 PHP INI 文件,只有在必要时才更新 PHP 8.3 变体。

请参见 “PHP 8.3 中的新变化”,查看 PHP 8.3 中废弃的 INI 指令和新增的 INI 指令。

使用 PHP-FPM 时,请确保复制了正确数量的 FPM 进程和进程模型。

phpenmod 和 phpdismod 脚本为 PHP 模块提供了大陆切换功能。例如,在 PHP 8.3 中禁用 FPM 的 phar 扩展:

sudo phpdismod -v 8.3 -s fpm phar 

更改后,重启 PHP 8.3-FPM:

sudo systemctl restart php8.3-fpm

9. 删除旧版本的 PHP 安装文件

此步骤仅适用于从旧版本 PHP 升级到 PHP 8.3 时

要删除旧的 PHP 版本,请运行 apt purge 并加上 PHP 版本前缀。例如,下面删除了 PHP 8.2 的软件包和配置:

sudo apt purge php8.2*

同时运行 PHP 8.3 和其他版本

可以在安装 PHP 8.3 的同时安装其他 PHP 版本。事实上,在安装 PHP 8.3 时,如果没有先删除旧的 PHP 包,就会出现这种情况。

默认情况下,所有 phpX.Y-cli 软件包都将 PHP CLI 二进制文件安装在 /usr/bin/phpX.Y 位置。这对 PHP 8.3 的安装意味着,任何以 php 调用 PHP CLI 的应用程序都将使用最后安装的 PHP-CLI 二进制文件(本例中为 PHP 8.3)。在使用多个 PHP 版本时,请确保通过直接调用 /usr/bin/phpX.Y 可执行文件来调用正确的 PHP 二进制文件。PHP 8.3 可直接调用 /usr/bin/php8.3。

默认情况下,php 名称将被链接到最新的 PHP 版本,但也可以更改默认 php 命令的链接位置。使用 update-alternatives 命令更改 php 命令的链接路径。

sudo update-alternatives --config php

这将弹出提示,以交互方式选择 php 指向的 PHP bin 路径。

There are 2 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php8.3   83        auto mode
  1            /usr/bin/php8.2   82        manual mode
  2            /usr/bin/php8.3   83        manual mode

要设置路径,无需交互式提示:

update-alternatives --set php /usr/bin/php8.2
阅读余下内容
 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注


京ICP备12002735号