网上能搜到的中文内容,根本不算无缝升级,既然敢叫无缝升级,那就是真的不关机,不中断服务,并且还能保证出问题能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 |
|
三、修改新的配置文件
php.ini 里面的扩展库路径,否则将会抛出警告,扩展不可用
php-fpm.conf 里面的 include=/usr/local/php7.3/etc/php-fpm.d/*.conf
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 | location ~ \.php$ { |
修改成新的监听地址, 重新载入 nginx 配置文件
1 | nginx -s reload |
测试网站没有问题就关掉旧版本的 php-fpm,有问题就修改 nginx 配置文件,使用旧的 php-fpm。
六、总结
大家可能也看出来了,这种升级方式事实上就是主机上安装多版本PHP,然后进行php-fpm的切换而已。这种方式不仅适用于PHP,其他如mysql,redis等均可适用。但是需要注意各个版本之间的代码差别,防止因版本改变而产生语法错误。