升级前必读
支持debian 10及以上os版本升级,因为在旧os系统中不支持的apt包,如果低于debian10系统,请服主自行选择是否升级; 请确认apt源是否是当前os版本,若低版本os用了高版本apt源,例如debian9 os用了debian11 apt源,可能会引起glibc系统库升级,进而影响项目代码正常运行升级指引
1.包管理安装(推荐)
a.备份
- 备份相关文件
#备份配置文件
cp -a /etc/php /etc/php.$(date +%Y%m%d%H%M%s)
cp -a /etc/apache2 /etc/apache2.$(date +%Y%m%d%H%M%s)
#备份旧包文件
dpkg -l | grep php |awk -F' ' '{print $2}' | tee php_packages_old.txt
b.升级
- 添加 ondrej/php 存储库
# Add Ondrej's repo source and signing key along with dependencies
apt install apt-transport-https
curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
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'
apt update
- 安装新的PHP 8.3包(扩展包从旧包复制)
此处演示7.4升级到8.3
# 备份并替换创建新包文件
cp -a php_packages_old.txt php_packages_new.txt
sed -i 's/7.4/8.3/g' php_packages_new.txt
# 查看新包是否为8.3版本
for i in `cat php_packages_new.txt`;do echo $i;done
# 执行安装
for i in `cat php_packages_new.txt`;do apt install -yyy $i;done
- web服务器集成
a2dismod php7.4
a2enmod php8.3
systemctl restart apache2
- 安装完成 安装完所有的软件包后,执行php -v检查升级情况是否符合预期
模块列表可以用 php -m 列出
c.测试
- php -v 查看版本号是否为8.3.4
- php -m 查看所需模块是否存在
- 针对特定业务执行具体URL请求测试
- 扩展包需业务执行兼容性测试
d.回滚方案
- 回滚到旧版本
a2dismod php8.3
a2enmod php7.4
ln -sf /usr/bin/php7.4 /etc/alternatives/php
php -v
systemctl restart apache2
e.删除旧版本
- 此步骤仅适用于从较旧的PHP版本更新到PHP 8.3时
- 要删除旧的PHP版本,请使用PHP版本前缀运行 apt purge
apt purge php7.4*
2.源码编译安装
# 更新系统软件包列表
sudo apt update
# 安装编译 PHP 所需的依赖
sudo apt install -y gcc make autoconf libc-dev pkg-config
sudo apt install -y libxml2-dev libssl-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libxpm-dev libfreetype6-dev libgmp-dev
sudo apt install -y libmcrypt-dev libreadline-dev libtidy-dev libxslt1-dev
# 创建临时目录并切换至该目录
mkdir ~/php_build
cd ~/php_build
# 下载 PHP 8.3.4 源代码
wget https://www.php.net/distributions/php-8.3.4.tar.gz
tar -xzf php-8.3.4.tar.gz
cd php-8.3.4
# 配置 PHP 编译选项(具体编译模块需结合自身情况确认)
./configure --prefix=/usr/local/php8 --with-config-file-path=/usr/local/php8 --enable-mysqlnd --with-pdo-mysql --with-curl --with-openssl --with-zlib --enable-bcmath --with-bz2 --enable-calendar --with-curl --enable-mbstring --with-mysqli --with-xmlrpc --with-xsl --with-zip --enable-zip
# 编译并安装 PHP
make
sudo make install
# 复制默认配置文件
sudo cp php.ini-development /usr/local/php8/php.ini
# 添加 PHP 到系统环境变量
echo 'export PATH=$PATH:/usr/local/php8/bin' >> ~/.bashrc
source ~/.bashrc
# 检查 PHP 版本
php -v
# 清理临时文件
cd ..
rm -rf ~/php_build
# 完成
报错处理
报错1:若.configure出现 No package 'xxxx' found类报错,需要安装对应包
# 报错
checking for krb5-gssapi krb5... no
configure: error: Package requirements (krb5-gssapi krb5) were not met:
No package 'krb5-gssapi' found
No package 'krb5' found
# 处理
sudo apt install libkrb5-dev