centos 服务器升级 PHP 版本到 8,以及升级过程中 php-fpm、nginx 出现的问题
准备搭建一个 Laravel8 项目环境,对应 PHP 8。服务器环境上 PHP 7.3.3,最理想的情况是像宝塔 panel 一样,可以自由切换 PHP 版本,甚至可以对某个项目使用指定版本的 php。这个想法在耗费了几个小时的尝试后被放弃了,而此时,环境里 PHP 的展现形式为 php80。因为与当前环境的兼容性问题,导致 php80-php-zip 安装不了,执行 php80 -v
一直有警告报错,说某个函数未定义如何如何的。此时我知道应该放弃这个想法,从环境里直接升级到 PHP 8 了。
升级的整个过程参考了 如何在CentOS8或者CentOS7上安装PHP8.0正式版 里的 [与其他PHP版本一起安装PHP 8.0] 部分的 [在CentOS 7上安装PHP 8.0]。此时应该对准 [将PHP 8.0安装为默认版本] 中的 [CentOS 7] 部分。以下为内容直接摘录:
sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum -y install yum-utils
sudo yum-config-manager --disable 'remi-php*'
sudo yum-config-manager --enable remi-php80
sudo yum -y install php php-{cli,fpm,mysqlnd,zip,devel,gd,mbstring,curl,xml,pear,bcmath,json}
这里包含了下载 rpm 包,以及安装 PHP 和 PHP 扩展,但此时因为环境中已经同时包含了 php 7.3.3 和 php 8 部分,所以需要先清理一下环境。这里要感谢另一位博主提供的对上面的内容解析博文 - CentOS升级PHP到8.0,里面除了分拆了各个部分指令的作用,还提供了一个删除系统里 PHP 老旧版本的指令:
yum list installed | grep php
清理的主要目标对象是非 php80 部分的旧版本的 php,配合使用 yum remove xxx
来达到删除已安装旧版 PHP 的目的。
主要删除了 php 和一个 php-common,然后按照上面的指令依次复制粘贴执行。但在安装完成之后还存在一些历史遗留问题,比如 php -v
和 php-fpm -v
显示的仍然是 php 7.3.3。
此时需要删除系统里的 php 和 php-fpm 文件。通过 find / -name php[-fpm]
找到旧版的 php 和 php-fpm 安装目录,rm -rf /path/to/php[-fpm]
删除系统中遗留的目录文件。通过 which php[-fpm]
找到旧版的可执行文件,然后继续删除。此时系统已经基本干净了,如果 php[-fpm] -v
报错找得不到可执行文件,这就需要清理一下 /etc/profile
文件,删除(或 ‘#’ 注释) php 定义路径部分,然后 source /etc/profile
更新即可。
php-fpm 80 版本因为旧版的存在导致并没有安装成功。清理 php-fpm 时需要将其进程杀死,删除目录,之后再重新安装 yum -y install php-fpm
。这边因为执行了只允许 php80 可用,所以可以不用指定版本,直接安装。
这个时候已经可以看到 php 的版本为 8 了,但 php-fpm 还没有启动。
查看php-fpm状态
systemctl status php-fpm
启动php-fpm
systemctl start php-fpm
停止php-fpm
systemctl stop php-fpm
重启php-fpm
systemctl restart php-fpm
systemctl start php-fpm
启动 php-fpm。
nginx -s reload
重启 nginx 报错:nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
。这主要是因为之前 killall nginx
删除 nginx 进程导致的,这提醒我们不能这么粗暴的干掉 web 服务。
此时需要使用添加 nginx 的配置文件进行启动。
$ find / -name nginx.conf
path/to/nginx/conf
$ nginx -c path/to/nginx/conf
到此,centos 7 升级 PHP 7 到 PHP 8 完成!