記一次安裝多版本php的四個雷區,你踩着了嗎
記一次安裝多版本的php的四個雷區,你踩着了嗎
需求:公司需要在同一台服務器上安裝不同版本的php,而這一台的服務上已經安裝了php.7.1,現需要同時存在兩個版本,而另一個版本為php5.6、
原版本的php是使用一鍵安裝工具oneinstack來裝的 工具下載可參考官網:https://oneinstack.com/install/
(以下安裝都是以oneinstack來安裝)
一、安裝另一個版本php5.6
注意以下是正確的安裝,遇到的坑下面再說
1、 安裝php5.6
因為以前的php也是使用oneinstack安裝的所以啟動文件是是php-fpm,我們需要修改php-fpm文件名,防止再次安裝被覆蓋。
停止本地的php7.1
|
1
|
#service php-fpm stop
|
更改php-fpm啟動文件名
|
1
|
#mv /etc/init.d/php-fpm /etc/init.d/php-fpm.bk
|
2、修改oneinstack的options.conf文件。
使用oneinstack工具安裝,每次都會讀取options.conf這跟文件,然后再安裝,所以需要修改該文件的php路徑,否則會提示,已經安裝
進入options.conf文件
|
1
|
#vim /root/oneinstack/options.conf
|
把php_install_dir=/usr/local/php 改為
php_install_dir=/usr/local/php56
3、執行安裝腳本安裝
|
1
|
#./install.sh
|

然后是漫長的等待
4、修改php配置文件
我們需要先停止剛剛安裝php-fpm因為使用oneinstack默認安裝完自動啟動
停止php5.6
|
1
|
#service php-fpm stop
|
把php-fpm更改成php5-fpm ,變成php5.6的啟動文件
|
1
|
#mv /etc/init.d/php-fpm /etc/init.d/php5-fpm
|
恢復本地php7.1啟動腳本
|
1
|
mv
/etc/init
.d
/php-fpm
.bk
/etc/init
.d
/php-fpm
|
5、設置php5.6、php7.1開機自啟動:
|
1
2
|
#chkconfig --add php5-fpm
#chkconfig --add php-fpm
|
|
1
2
|
#chkconfig php5-fpm on
#chkconfig php-fpm on
|
6、修改sock的沖突文件,防止啟動沖突
更改php5.6的配置文件就好
|
1
2
|
#vim /usr/local/php56/etc/php-fpm.conf
:
|
把
|
1
|
listen =
/dev/shm/php-cgi
.sock
|
修改為:
|
1
|
listen =
/dev/shm/php5-cgi
.sock
|
7、修改php的環境變量
|
1
|
vim
/etc/profile
|
去到最后一行
把
|
1
|
export
PATH=
/usr/local/php56/bin
:
/usr/local/php/bin
:$JAVA_HOME
/bin
:
/usr/local/nginx/sbin
:
/usr/local/mysql/bin
:$PATH
|
改為
|
1
|
export
PATH=
/usr/local/php/bin
:
/usr/local/php/bin
:$JAVA_HOME
/bin
:
/usr/local/nginx/sbin
:
/usr/local/mysql/bin
:$PATH
|
這個為什么要改呢,因為php5.6版本,在我執行一些命令的時候,出現錯誤(原項目一直用的是php7.1的,就需要改,這是一個大坑,下面再說)
8、重啟php服務
啟動php7.1
|
1
|
#service php-fpm start
|
啟動php5.6
|
1
|
#service php5-fpm start
|
9、查看多版本運行情況
如下圖:

安裝完成
二、容易的踩到的雷區及解決辦法
雷區一、沒有備份php-fpm文件,直接安裝
過程原因:
第一安裝的時候,可把我給害慘了,沒有對oneinstack用的很熟練然后就直接安裝了,導致一下子忘記把php-fpm備份
結果:
安裝完后,發現,原來的php-fpm文件給覆蓋了,導致把原來的php7.1重裝。
雷區二、沒有修改php-fpm.conf文件就啟動php
過程原因:
直接啟動php7.1,再啟動5.6,發現啟動不了,搞了很久,才發現原來是php-cgi.sock文件占用問題
結果:
把php56目錄下的的php-fpm.conf文件的php-cgi.sock配置改成php5-cgi.sock后,重啟,完畢。
雷區三、沒有修改環境變量
過程原因:
因為安裝php5.6或,隨着就會更改環境變量的文件/etc/profile的變量環境目錄,會把原來的/usr/local/php改為/usr/local/php56,這個更改,導致我的一些命令執行出錯,比如composer,php等等。
結果:
把/etc/profile的/usr/local/php56改為/usr/local/php,執行php -v,發現版本回來了,命令執行也可以了。
雷區四、 修改nginx虛擬主機應用php版本
過程原因:
oneinstack執行./vhost.sh腳本創建虛擬主機是,默認是默認調用php的接口是的php-cgi.sock文件,而我的新的項目上,是調用php5.6。
結果:
把新建完的虛擬主機所調用的php接口改為fastcgi_pass unix:/dev/shm/php-cgi.sock; 改為fastcgi_pass unix:/dev/shm/php5-cgi.sock;重新新加載nginx,項目部署成功。
三、總結
一個服務的多版本問題,主要考慮的是的兼容性,當我們在一台服務器上安裝多個版本的服務,我們需要有足夠的把握,才去部署,你可以在本地安裝測試完再部署到線上的環境,另外,對一些熱門的軟件,需要要熟練的掌握才行,避免操作出錯。
2
收藏

Ctrl+Enter 發布
發布