记一次安装多版本的 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
#service php-fpm stop
更改 php-fpm 启动文件名
#mv /etc/init.d/php-fpm /etc/init.d/php-fpm.bk
2, 修改 oneinstack 的 options.conf 文件.
使用 oneinstack 工具安装, 每次都会读取 options.conf 这跟文件, 然后再安装, 所以需要修改该文件的 php 路径, 否则会提示, 已经安装
进入 options.conf 文件
#vim /root/oneinstack/options.conf
把 php_install_dir=/usr/local/php 改为
php_install_dir=/usr/local/php56
3, 执行安装脚本安装
#./install.sh
然后是漫长的等待
4, 修改 php 配置文件
我们需要先停止刚刚安装 php-fpm 因为使用 oneinstack 默认安装完自动启动
停止 php5.6
#service php-fpm stop
把 php-fpm 更改成 php5-fpm , 变成 php5.6 的启动文件
#mv /etc/init.d/php-fpm /etc/init.d/php5-fpm
恢复本地 php7.1 启动脚本
mv /etc/init.d/php-fpm.bk /etc/init.d/php-fpm
5, 设置 php5.6,php7.1 开机自启动:
- #chkconfig --add php5-fpm
- #chkconfig --add php-fpm
- #chkconfig php5-fpm on
- #chkconfig php-fpm on
6, 修改 sock 的冲突文件, 防止启动冲突
更改 php5.6 的配置文件就好
- #vim /usr/local/php56/etc/php-fpm.conf
- :
把
listen = /dev/shm/php-cgi.sock
修改为:
listen = /dev/shm/php5-cgi.sock
7, 修改 php 的环境变量
vim /etc/profile
去到最后一行
把
export PATH=/usr/local/php56/bin:/usr/local/php/bin:$JAVA_HOME/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:$PATH
改为
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
#service php-fpm start
启动 php5.6
#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, 项目部署成功.
三, 总结
一个服务的多版本问题, 主要考虑的是的兼容性, 当我们在一台服务器上安装多个版本的服务, 我们需要有足够的把握, 才去部署, 你可以在本地安装测试完再部署到线上的环境, 另外, 对一些热门的软件, 需要要熟练的掌握才行, 避免操作出错.
来源: http://blog.51cto.com/xiaozhagn/2134202