概述
此文主要作为笔者日常工作的一个记录备忘备查。
笔者现在有一个正在维护的PHP项目。原有的应用环境环境是PHP-7.1.3。由于被告知此版本有一些安全方面的隐患,需要进行升级维护。考虑到项目的开发环境已经升级到7.4.33,遂决定为了保持一致,也升级到此版本。之所以没有升级到更高的版本,主要考虑到代码的兼容性和相关支撑组件的兼容性。
本文的主要内容就是记述这一过程,同时在这一过程中,还遇到了一些问题,并且进行了一些规划和考量,主要包括:
- 操作系统环境为CentOS 7, 而且无法选择升级和变更
- 由于操作系统比较陈旧,原有的Reposity都已经失效
- 默认的PHP安装,已经无法升级到7.4这个版本
- 其他相关模块配套的问题
升级过程
根据以上问题和考虑,实际规划和进行的升级操作步骤如下。
卸载原有版本
首先需要卸载原有的PHP版本和相关软件,使用yum remove命令如下:
scss
// 查看当前版本
php -v
PHP 7.1.33 (cli) (built: Oct 26 2019 10:16:23) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.1.33, Copyright (c) 1999-2018, by Zend Technologies
// 卸载当前版本
yum remove php
...
后来笔者发现,应该是使用 remove php* 命令的,可能可以卸载的更加彻底一点。
配置软件仓库
由于原有默认的仓库配置,基本上已经无法正常使用。笔者选择重新配置为阿里云的CentOS软件库,执行命令如下:
shell
// 检查和确认当前 CentOS 版本
cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
// 获取仓库文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
// 更新仓库
yum update
安装和设置Remi软件库
在默认的CentOS软件仓库中,已经无法安装PHP到7.4版本了,所以需要使用一个名为remi的第三方软件仓库,它提供了比较完善的PHP版本和模块的安装支持。可以使用rpm的方式安装和设置。
shell
// 安装remi软件库信息
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
...
// 配置remi软件仓库支持7.4
yum-config-manager --enable remi-php74
Loaded plugins: fastestmirror
============================================================================================================ repo: remi-php74 =============================================================================================================[remi-php74]
async = True
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7
baseurl =
...
remi是可以支持多个PHP版本的安装的。默认情况下,可以指定特定的PHP模块版本,如 php74-php-mysql。文中为了简化操作,指定当前的PHP版本为7.4,这样PHP的版本和相关的模块都可以保证在版本上是合适并且匹配的。
安装PHP和配套模块
在配置好remi的默认PHP版本后,后续安装的PHP和相关模块,都是7.4的了:
shell
yum install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis php-pgsql php-zip php-gmp
...
remi-php74
remi-php74/primary_db
Package php71w-common is obsoleted by php-common, trying to install php-common-7.4.33-15.el7.remi.x86_64 instead
Package php-mcrypt is obsoleted by php-pecl-mcrypt, trying to install php-pecl-mcrypt-1.0.7-1.el7.remi.7.4.x86_64 instead
...
Loaded plugins: fastestmirror
=====================================================================
WARNING : PHP 7.4 have reached its "End of Life" in
November 2022. Even, if this package includes some of
the important security fixes, backported from 8.1, the
UPGRADE to a maintained version is very strongly RECOMMENDED.
=====================================================================
可以看到这一过程中,安装程序会检查相关版本的兼容性,尽力安装版本兼容的软件,并处理版本冲突或者升级的问题。还是比较方便的。但在后面的警告信息中,我们也得知,PHP7.4的生命周期也已经结束,但没有办法,当前的代码可能只能支持到PHP7,而且这个软件继续开发和升级的可能性也不大,所以只能先这样了。
检查安装和模块
可以使用 -v 和 --modules 参数,检查当前的安装情况:
shell
php -v
PHP 7.4.33 (cli) (built: Jun 5 2024 05:05:14) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies
php --modules
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
igbinary
json
ldap
libxml
mbstring
mcrypt
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
sockets
sodium
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zlib
[Zend Modules]
Zend OPcache
除了使用 -modules参数之外,还可以使用phpinfo函数,查看当前环境更多更丰富的系统信息:
info.php
<?php phpinfo() ?>
项目特别模块
作为备忘,笔者项目中涉及的比较特殊的模块包括,如果代码执行过程中遇到缺乏相关函数和库支持的时候,需要考虑进行补充的安装配置:
- zip: 内容压缩
- pgsql: postgres数据库支持
- redis: 支持redis
- gmp: 多精度数学库
- gd: PHP图形库
- xml、xmlreader、xmwriter、xsl、simpleXML: XML信息处理
- mbstring: 多字节字符串处理
- session: 会话管理
小结
本文简要记述了笔者在实际工作中遇到的PHP应用环境升级的过程,探讨了相关规划和操作的步骤,需要注意的问题和安装验证的方式。