教程基于《OneinStack》一键PHP/JAVA安装工具中lnmp模式,很用户希望一个网站运行在php5.4,另一个网站运行在php7.0下,一台服务器上同时支持多个PHP版本,步骤如下:
1. 安装OneinStack
选择lnmp模式,默认安装php7.0,安装步骤参考:http://oneinstack.com/auto/
选项如下:
- Install Nginx
- Do not install Apache
- Do not install Tomcat
- Install MySQL-5.7
- Install php-7.0
- ....
2. 安装php5.4
2018-12-15之后,php-fpm切换至systemctl管理服务,如下:
- systemctl stop php-fpm #后面需要再安装php5.4,需要停止php7.0
- mv /lib/systemd/system/php-fpm.service{,_bk} #后面需要再安装php5.4会覆盖,备份启动脚本
2018-12-15之前,php-fpm使用老的sysV脚本,如下:
- service php-fpm stop #后面需要再安装php5.4,需要停止php7.0
- mv /etc/init.d/php-fpm{,_bk} #后面需要再安装php5.4会覆盖,备份启动脚本
默认php7.0安装路径是/usr/local/php,如果再次安装会提示php已经安装,因此必须修改options.conf的php安装目录,将php5.4安装路径设置为/usr/local/php54,修改/root/oneinstack/options.conf:
- php_install_dir=/usr/local/php54
再次执行./install.sh --php_option 2,等待ing
3. 修改php配置文件
2018-12-15之后,php-fpm切换至systemctl管理服务,如下:
- service php-fpm stop #停止步骤二安装的php5.4启动脚本
- mv /lib/systemd/system/php-fpm.service /lib/systemd/system/php54-fpm.service #重命名php5.4启动脚本
- mv /lib/systemd/system/php-fpm.service_bk /lib/systemd/system/php-fpm.service #恢复php7.0启动脚本
设置php7.0、php5.4开机自启动:
- systemctl enable php-fpm
- systemctl enable php54-fpm
2018-12-15之前,php-fpm使用老的sysV脚本,如下:
- service php-fpm stop #停止步骤二安装的php5.4启动脚本
- mv /etc/init.d/php-fpm /etc/init.d/php54-fpm #重命名php54启动脚本
- mv /etc/init.d/php-fpm_bk /etc/init.d/php-fpm #恢复php7.0启动脚本
设置php7.0、php5.4开机自启动:
- # CentOS:
- chkconfig --add php-fpm
- chkconfig --add php54-fpm
- chkconfig php-fpm on
- chkconfig php54-fpm on
- # Ubuntu/Debian:
- update-rc.d php-fpm defaults
- update-rc.d php54-fpm defaults
防止php5.4、php7.0监听sock冲突,修改php5.4的listen,更改配置文件/usr/local/php54/etc/php-fpm.conf:
- listen = /dev/shm/php-cgi.sock
- #改成
- listen = /dev/shm/php54-cgi.sock
手工启动php7.0、php5.4:
- service php-fpm start #启动php7.0
- service php54-fpm start #启动php5.4
如下图:
4. 修改nginx虚拟主机配置文件
./vhost.sh绑定域名,默认是运行在php7.0,如需要将网站运行在php5.4下,需要修改/usr/local/nginx/conf/vhost/www.oneinstack.com.conf(www.oneinstack.com改成自己绑定域名):
- fastcgi_pass unix:/dev/shm/php-cgi.sock;
- #改成
- fastcgi_pass unix:/dev/shm/php54-cgi.sock;
重新加载nginx,使配置生效:
- service nginx reload
Tue Feb 2 13:00:31 CST 2016
1F
如果使用MEMCACHED之类的,还需要做什么操作吗?
B1
@ 小翼 一样的操作
2F
有新版本 PHP,如果要升级 PHP5.4 及 PHP7 版本,该如何升级?
B1
@ miming 修改options.conf 来回切换升级。注意/etc/init.d/php-fpm 备份
3F
建议加入OneinStack
B1
@ ClayMore 体验不太好
4F
学习了 谢谢博主
5F
如果5.4安装过redis、memcached、memcache、imagick、gmagick这些扩展模块了,再安装PHP7还需要再安装一遍吗?
B1
@ Jason 要的
6F
我先安装了7 可不可以在安装5?
B1
@ m1911 可以
7F
成功了,谢谢老大。
8F
请问下,博主,装了php5.6版本,能再装PHP7同时运行吗?
B1
@ 折扣团 可以,按照此方法即可
9F
我想用apache+ng的,该怎样做呢?
B1
@ smartweb 安装前更改apache php安装路径 ,Listen将88 改成89
10F
我将过a+n使用mod_php5的方式 也可以,安装好php5.6之后将libphp5.so改为libphp56.so,按方法将php安装配置路径改为php54再安装php5.4,就会有libphp5.so和libphp56.so两个文件。再在apache网站配置文件httpd.conf中的LoadModule php5_module modules/libphp5.so 删除,再在0.conf的下一行加入LoadModule modules/libphp56.so再重apache两次就可以看到php版本改了,就是不明白为什么要两次。
,
11F
先收藏,改天亲测一下
12F
非常爽,感谢。
问下如果要 php5 and php7 都使用redis,该怎么操作呢?
比如 php5 安装的同时安装了redis,如果php7 安装的时候也选择不就装2次了?
扩展会在没选择安装redis的情况下 自动安装吗?
B1
@ Lee 都选择redis即可
13F
我现在安装的是Nginx+Apache+Tomcat+Php5.3.29和其它都是默认安装的第一项,如何实现PHP5.3.29+PHP7共存呢
B1
@ 绿血贵族 更改apache php路径 再安装apache php,并更改apache监听端口,更改对应nginx配置
14F
按照上诉方法在7上安装了5.6共存成功,但是子域名依然不能调用5.6,求指教
15F
Debian 9 重启自启动 多版本PHP 启动不了.
root@vultr:/etc# update-rc.d php56-fpm defaults
insserv: script php56-fpm: service php-fpm already provided!
insserv: script php70-fpm: service php-fpm already provided!
提示加入了自启动, 但是重启之后, 只看到只有一个 php-fpm 启动了 php56 php70 未启动.
搞不明白了…
B1
@ CC 对应脚本名字没改。
16F
老大能否出一个环境为apache+php下的php多版本共存的教程呢,万分感谢
B1
@ mxxo Apache2.4使用fcgi 已经支持自动安装多版本php
17F
如果先装PHP5,步骤可以略微简化一点。
装完PHP5,systemctl stop php-fpm
mv /lib/systemd/system/php-fpm.service /lib/systemd/system/php5-fpm.service #重命名php5启动脚本
修改PHP install dir
再次执行./install.sh
设置php7、php5开机自启动:
systemctl enable php-fpm
systemctl enable php5-fpm
如果安装完PHP默认就是/lib/systemd/system/php{版本号}-fpm.service就更方便一点了
B1
@ 七彩旋律 教程已经更新,感谢!
18F
有没有考虑做成像homestead中那样的环境脚本
B1
@ weini 已经支持多版本:https://oneinstack.com/auto/