如何在Ubuntu和Debian上安装或升级到最新版本PHP 8.3

2023-11-23 14:05:22 浏览数 (1)

介绍

PHP 8.3是2023年PHP的主要新更新。它带来了很好的新特性,比如类型化的类常量,一组新的DateTime扩展,一个新的 json_validate 函数,以及一些新特性,更改和弃用。和往常一样,PHP 8.3带来了一些bug修复和改进以及性能改进。

本文介绍了如何在现代Debian系统和Ubuntu系统上安装PHP 8.3。一些最流行的PECL扩展也可以以类似的方式安装,这些扩展在安装PECL扩展部分中列出。

Debian(10、11和12)

代码语言:javascript复制
# 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和24.04)

代码语言:javascript复制
## 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包可以从Ondinej Survival维护的存储库中获得,本文使用该存储库。此存储库中的包遵循与OS软件存储库提供的PHP包相同的包配置、包名称和 systemd 配置。

以下操作将作为 sudo 执行,并且需要该级别的权限才能继续。在进行任何系统范围的更改时,通常的警告也适用于此。请确保备份系统并在继续之前检查备份。升级时,不要忘记将配置迁移到新的PHP版本。

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

当升级一个现有的PHP版本时,下面的命令会列出所有在包名中带有 php 的包,并将其保存到 packages.txt 文件中,同时在终端中打印。

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

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

代码语言:javascript复制
dpkg -l | grep php | tee packages.txt

3、添加 ondrej/php 存储库

PHP 8.3不能从任何当前的Debian或Ubuntu软件库下载。Debian和Ubuntu软件库由Ondiej Survival维护,包含主要的PHP 8.3软件包和几个流行的PECL软件包,它们都是最新的。

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

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

Debian

代码语言:javascript复制
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

代码语言:javascript复制
sudo add-apt-repository ppa:ondrej/php # Press enter when prompted.
sudo apt update

4、安装新的PHP 8.3包

添加了Ondrej的PHP存储库后,现在可以使用 apt 安装PHP包。所有PHP 8.3包都遵循 php8.3-XYZ 模式。这些名称匹配并覆盖由操作系统自己的软件存储库提供的PHP版本。

代码语言:javascript复制
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 大致相当于安装所有扩展,如下所示:
代码语言:javascript复制
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服务器集成。有关替代方法,请参见Web服务器集成。

5、其他PHP扩展

存储库中还提供了几个PECL扩展,可以方便地安装它们,而无需编译它们。这包括一些更流行的PECL扩展,如Image Magick,APCu和Xdebug。

下面是一些PECL扩展及其包名称,将与 apt install 一起使用以进行安装。

请注意,这些PECL扩展是由个人开发人员/团队开发的,可能没有经过很好的测试。上传这些包也可能需要一些时间,等待相应扩展开发的兼容性修复。

以下是对 apt 的简单搜索:

代码语言:javascript复制
sudo apt search php8.3-apcu # Search for "apcu" under PHP 8.3

6、Web服务器集成

在大多数用例中,PHP与Web服务器集成。通过FastCGI协议与PHP-FPM集成是最常见的方法,同时也可以将PHP与其他SAPIs集成。

在安装 php8.3-fpm 包时,如果Apache Web服务器( apache2 )存在,则会有一个新的 php8.3-fpm.conf 文件,以便切换PHP 8.3集成:

代码语言:javascript复制
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_phpmod_php8 )运行时,安装 libapache2-mod-php8.3 包而不是 php8.3-fpm

代码语言:javascript复制
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 服务。

对于通过FastCGI与PHP集成的Web服务器,请将UNIX套接字路径更改/配置为此UNIX套接字地址。

例如,在Nginx上,这涉及到更改 fastcgi_pass 指令:

7、测试PHP 8.3安装

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

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

模块列表可以用 php -m 列出。这个列表将包括几个捆绑的PHP扩展。有关将PHP INI指令和启用的扩展迁移到新PHP版本的信息,请参见迁移配置。

8、迁移配置

此步骤仅适用于从较旧的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中的新增和更改,以查看已弃用的INI指令和PHP 8.3中添加的新INI指令。

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

phpenmodphpdismod 脚本为PHP模块提供了大陆切换。例如,下面的代码禁用了PHP 8.3上FPM的 phar 扩展:

代码语言:javascript复制
sudo phpdismod -v 8.3 -s fpm phar 

完成更改后,重新启动PHP 8.3-FPM:

代码语言:javascript复制
sudo systemctl restart php8.3-fpm

9、删除旧的PHP版本

此步骤仅适用于从较旧的PHP版本更新到PHP 8.3时

要删除旧的PHP版本,请使用PHP版本前缀运行 apt purge 。例如,下面的代码删除了PHP 8.2的包和配置:

代码语言:javascript复制
sudo apt purge php8.2*

0 人点赞