✔ 为什么要升级PHP版本
就是这么逗逼,从PHP 5.4升级到7.0之后,WordPress又升了几次版本,让PHP 7.0又成了明日黄花(不是“昨日黄花”啊同志们,成语要用对),虽然7.0还能用,但是每次进WordPress后台看到的“PHP版本太旧”的提示很碍眼,于是我下定决心要把它升级到当前最主流的 7.3 版——本文写作之时,是2020年7月。
以下步骤只适用于CentOS 7系统(具体子版本不确定能支持到什么范围)。
就是这么逗逼,从PHP 5.4升级到7.0之后,WordPress又升了几次版本,让PHP 7.0又成了明日黄花(不是“昨日黄花”啊同志们,成语要用对),虽然7.0还能用,但是每次进WordPress后台看到的“PHP版本太旧”的提示很碍眼,于是我下定决心要把它升级到当前最主流的 7.3 版——本文写作之时,是2020年7月。
以下步骤只适用于CentOS 7系统(具体子版本不确定能支持到什么范围)。
✔ 怎样升级PHP版本最方便
这回我就没有那么幸运了,虽然还是可以用yum来安装PHP相关的package,但是安装好之后有很多问题导致不能用,折腾了好些时间才搞定。作为一个平常工作中完全不用PHP的人,我太难了。
✔ 确定CentOS版本
这回我就没有那么幸运了,虽然还是可以用yum来安装PHP相关的package,但是安装好之后有很多问题导致不能用,折腾了好些时间才搞定。作为一个平常工作中完全不用PHP的人,我太难了。
✔ 确定CentOS版本
cat /etc/redhat-release
✔ 安装remi的centos7的源
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y install epel-release yum-utils
✔ disable PHP 5.4的repo
yum-config-manager --disable remi-php54
yum-config-manager --enable remi-php73
✔ 查看已经安装过的PHP包
yum list installed | grep php
php70w.x86_64 7.0.33-1.w7 @webtatic
php70w-cli.x86_64 7.0.33-1.w7 @webtatic
php70w-common.x86_64 7.0.33-1.w7 @webtatic
php70w-devel.x86_64 7.0.33-1.w7 @webtatic
php70w-fpm.x86_64 7.0.33-1.w7 @webtatic
php70w-gd.x86_64 7.0.33-1.w7 @webtatic
php70w-mysql.x86_64 7.0.33-1.w7 @webtatic
php70w-opcache.x86_64 7.0.33-1.w7 @webtatic
php70w-pdo.x86_64 7.0.33-1.w7 @webtatic
✔ 安装yum替换插件
yum -y install yum-plugin-replace
✔ 替换PHP 7的相关模块
根据之前用 yum list installed | grep php 命令得到的结果,使用如下命令替换(升级)对应的模块:
yum -y replace php70w --replace-with=php73-php
替换以后,会自动替换/安装一堆的依赖package,因此下面的这些package,某些不再需要单独替换,某些也无法通过replace的方式来升级了(所以你看到,下面的命令都注释掉了):
# yum -y replace php70w-cli --replace-with=php73-php-cli
# yum -y replace php70w-common --replace-with=php73-php-common
# yum -y replace php70w-devel --replace-with=php73-php-devel
# yum -y replace php70w-fpm --replace-with=php73-php-fpm
# yum -y replace php70w-gd --replace-with=php73-php-gd
# yum -y replace php70w-mysql --replace-with=php73-php-mysqlnd
# yum -y replace php70w-opcache --replace-with=php73-php-opcache
# yum -y replace php70w-pdo --replace-with=php73-php-pdo
注意上面的红字:在这个源的7.3版中,已经没有 php-mysql 这个package了,只有 php-mysqlnd (这是一种比 php-mysql 效率更高的和mysql的连接方式)。
下面是要新安装的package:
yum install php73-php-devel php73-php-fpm php73-php-gd php73-php-mysqlnd php73-php-opcache php73-php-pdo
✔ 新安装的 php-fpm 可执行程序在哪?
/opt/remi/php73/root/usr/sbin/php-fpm
✔ 修改 php-fpm 的一个配置文件
vim /etc/opt/remi/php73/php-fpm.d/www.conf
注释掉这一行:
listen = 127.0.0.1:9000
添加:
fastcgi_pass unix:/var/opt/remi/php73/run/php-fpm/php-fpm.sock;
✔ 对应这个配置,nginx的配置文件也要做相应修改:
vim /usr/local/nginx/conf/nginx.conf
这一句:
fastcgi_pass unix:/dev/shm/php-fpm.sock;
改成:
fastcgi_pass unix:/var/opt/remi/php73/run/php-fpm/php-fpm.sock;
✔ 测试php-fpm
/opt/remi/php73/root/usr/sbin/php-fpm -t
打印出如下消息即为成功:
NOTICE: configuration file /etc/opt/remi/php73/php-fpm.conf test is successful
✔ 为php-fpm创建一个service,从而可以用 systemctl 命令来管理
cd /etc/systemd/system/php73-php-fpm.service.d
(↑↑↑该目录本来就存在,如果不存在,可以自己mkdir)
创建3个管理脚本:
vim start-php-fpm.sh
#!/bin/bash
/opt/remi/php73/root/usr/sbin/php-fpm -c /etc/opt/remi/php73/php.ini -y /etc/opt/remi/php73/php-fpm.conf
# make nginx user(apache) can access this file
chown apache:apache /var/opt/remi/php73/run/php-fpm/php-fpm.sock
vim stop-php-fpm.sh
#!/bin/bash
kill -INT `cat /var/opt/remi/php73/run/php-fpm/php-fpm.pid`
vim reload-php-fpm.sh
#!/bin/bash
kill -USR2 `cat /var/opt/remi/php73/run/php-fpm/php-fpm.pid`
# make nginx user(apache) can access this file
chown apache:apache /var/opt/remi/php73/run/php-fpm/php-fpm.sock
接着创建 php-fpm 的service文件:
cd /etc/systemd/system
vim php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target
[Service]
Type=simple
PIDFile=/var/opt/remi/php73/run/php-fpm/php-fpm.pid
ExecStart=/etc/systemd/system/php73-php-fpm.service.d/start-php-fpm.sh
ExecReload=/etc/systemd/system/php73-php-fpm.service.d/reload-php-fpm.sh
ExecStop=/etc/systemd/system/php73-php-fpm.service.d/stop-php-fpm.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
(↑↑↑里面的 ExecStart,ExecReload,ExecStop都只能填绝对路径,使用了前面创建的3个脚本)
✔ 设置开机启动php-fpm
systemctl enable php-fpm
✔ 重启web服务
systemctl restart php-fpm
systemctl restart nginx
✔ 下面的命令是debug用:不通过 systemctl,直接控制 php-fpm 进程的方式
修改 php-fpm 生成的 php-fpm.sock 文件的权限,否则 nginx 进程没有权限访问它(取决于你的nginx配置文件里的user设置):
chown apache:apache /var/opt/remi/php73/run/php-fpm/php-fpm.sock
启动php-fpm
/opt/remi/php73/root/usr/sbin/php-fpm -c /etc/opt/remi/php73/php.ini -y /etc/opt/remi/php73/php-fpm.conf
重启php-fpm
kill -USR2 `cat /var/opt/remi/php73/run/php-fpm/php-fpm.pid`
关闭php-fpm
kill -INT `cat /var/opt/remi/php73/run/php-fpm/php-fpm.pid`