平滑升级PHP版本

网上能搜到的中文内容,根本不算无缝升级,既然敢叫无缝升级,那就是真的不关机,不中断服务,并且还能保证出问题能100%退回原来的版本。

一、获取原来的编译参数

使用命令

1
php -i | grep configure

把 ‘’ 去掉就是原来的编译参数

1
./configure  --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-opcache --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbstring --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-zlib --enable-zip --with-bz2 --with-readline --with-gd --enable-gd-native-ttf --enable-gd-jis-conv

更改其中安装目录防止与现有版本冲突

1
--prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/

现在改成

1
--prefix=/usr/local/php7.3/ --with-config-file-path=/usr/local/php7.3/etc/

然后就生成 Makefile 文件, make && make install 这里没什么好说的。

二、复制配置文件

1
2
3
4
5
6

mv PHP7.3安装目录/etc/php-fpm.conf.default PHP7.3安装目录/etc/php-fpm.conf

mv PHP7.3源码目录/php.ini-development PHP7.3安装目录/etc/php.ini

mv PHP7.3安装目录/etc/php-fpm.d/www.conf.default PHP7.3安装目录/etc/php-fpm.d/www.conf

三、修改新的配置文件

  1. php.ini 里面的扩展库路径,否则将会抛出警告,扩展不可用

  2. php-fpm.conf 里面的 include=/usr/local/php7.3/etc/php-fpm.d/*.conf

  3. www.conf 里面的 listen

    1
    2
    3
    ;listen = 127.0.0.1:9000 ;原

    listen = 127.0.0.1:9001 ;新

新旧版本各监听不同端口。

四、启动新的 php-fpm

1
/usr/local/php7.3/sbin/php-fpm

此时两个版本将共同存在

五、测试新的 php-fpm

打开你的 nginx 配置文件,找到

1
2
3
4
5
6
 location ~ \.php$ {
fastcgi_pass 127.0.0.1:9001; # 改成新的端口
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

修改成新的监听地址, 重新载入 nginx 配置文件

1
nginx -s reload

测试网站没有问题就关掉旧版本的 php-fpm,有问题就修改 nginx 配置文件,使用旧的 php-fpm。

六、总结

大家可能也看出来了,这种升级方式事实上就是主机上安装多版本PHP,然后进行php-fpm的切换而已。这种方式不仅适用于PHP,其他如mysql,redis等均可适用。但是需要注意各个版本之间的代码差别,防止因版本改变而产生语法错误。

关注作者公众号,获取更多资源!
赏作者一杯咖啡~