记一次安装多版本php的四个雷区,你踩着了吗
记一次安装多版本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 发布
发布
记一次安装多版本php的四个雷区,你踩着了吗的更多相关文章
- 记录:Ubuntu 18.04 安装 tensorflow-gpu 版本
狠下心来重新装了系统,探索一下 gpu 版本的安装.比较令人可喜的是,跟着前辈们的经验,还是让我给安装成功了.由于我是新装的系统,就像婴儿般纯净,所以进入系统的第一步就是安装 cuda,只要这个不出错 ...
- npm安装指定版本
今天犯了一个低级错误,在npm安装依赖时,命令写成下了格式 npm i --save iview 2.0.0 要安装指定版本应该使用 npm i --save iview@2.0.0 谨记
- VS2019打开项目加载失败:无法找到 .NET Core SDK。请检查确保已安装此项且 global.json 中指定的版本(如有)与所安装的版本相匹配。
问题描述: 用VS2019创建了asp.net core项目,正常运行:过几天后,再次打开,发现无法加载项目,报错无法找到.net core sdk. 分析过程: 首先怀疑环境变量的问题,重新设置 ...
- 如何为eclipse安装合适版本的python插件pydev
pydev是一款优秀的Eclipse插件,大多数喜欢在eclipse开发软件的程序员(也许是java程序员)在开发python软件时希望继续使用eclipse,那么pydev是非常理想的选择. 1.安 ...
- ubuntu14.04下配置Java环境以及安装最新版本的eclipse
首先是配置JDK 步骤一:下载最新版本的JDK,链接:http://www.oracle.com/technetwork/java/javase/downloads/index.html 步骤二:首先 ...
- Python 基础之在ubuntu系统下安装双版本python
前言:随着python升级更新,新版本较于老版本功能点也有不同地方,作为一个初学者应该了解旧版本的规则,也要继续学习新版本的知识.为了能更好去学习python,我在ubuntu安装python2和py ...
- 在树莓派(Raspberry Pi)上编译安装更新版本的Python
Raspiban Wheezy上预装的Python3版本是3.2.3,本文将介绍升级到3.4.3的方法. 此文也适用于安装其它版本(比如最新版本)的Python. 我用的是B+型的树莓派,装的系统是2 ...
- 安装指定版本的cordova
安装指定版本的cordova 刚接触cordova看到教程肯定是直接 npm install -g cordova 然后下载个集成的adt 以为万事大吉,开始hello world 玩玩没有想到最新的 ...
- yum安装高版本mysql(5.5)
1.导入第三方源webtatic rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm 2.如果已安装低版本的mysql就删除 yum r ...
随机推荐
- [Grunt] Development Automation Tasks with Grunt
With Grunt you can automate core tasks for your AngularJS project. In this lesson we will take a loo ...
- [AngularJS] ng-change vs $scope.$watch
<div class="form-group"> <label for="pwd">Password</label> < ...
- 【canvas】四角光阑
代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...
- IOS:Camera的特性分析与使用
Camera是IOS中很重要的一个信息获取途径. 以下我们主要从硬件特性以及软件特性两个方面来看看Canera的使用,先来看看软件上我们使用Camera都能干点什么. 先来看看以下一张图: 相机软件部 ...
- Google C++ Coding Style 学习笔记
写在前面:最新公司马上就要开始开发一款视觉产品,工程量较大,且需要对客户提供可以二次开 发的SDK,整个项目用C++编写. 这就对代码质量提出了非常高的要求,同时,如何设计出优雅稳定的API也是相当大 ...
- 43、Java动态代理一——动态类Proxy的使用
1.什么是动态代理? 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统 ...
- STS(Spring Tool Suite)创建maven项目
右键菜单选择新建->maven项目 自己创建存放配置文件需要使用的maven文件夹
- 摘:通过ICursor对Table进行操作(添加、修改、删除)
通过ICursor对Table进行操作(添加.修改.删除) 连接上数据表的目的就是对其进行包括浏览.添加.修改.删除等基本操作. 浏览功能,之前文章中一提到,就是将Itable转换为DataTable ...
- GPU 编程入门到精通(四)之 GPU 程序优化
博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...
- 使用命令行设置树莓派的wifi网络
假设你没有登录到经常使用的图形用户界面.这样的方法就适合用来设置树莓派的wifi.尤其是在你没有屏幕或者有线网络,仅使用串口控制线的时候.另外,这样的方法也不须要额外的软件,全部须要的东西都已经包括进 ...