介绍
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版本。
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服务器集成。有关替代方法,请参见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集成:
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
服务。
对于通过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流程和流程模型。
phpenmod
和 phpdismod
脚本为PHP模块提供了大陆切换。例如,下面的代码禁用了PHP 8.3上FPM的 phar 扩展:
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*