一、编译路径
多个版本php要共存,必须使用不同的安装路径。比如,之前php5.6安装在/usr/local/php,那么我们安装php7的时候,就应该定义到 /usr/local/php7 等不一样的路径。
就如之前php7编译安装分享的那样,php版本聚富彩票源码搭建bbs.yasewl.com把安装目录和配置文件目录都指向新的路径:
1
2
3
4
5
6
7
8
9
|
CFLAGS
=
CXXFLAGS
=
.
/
configure
--
prefix
=
/
usr
/
local
/
php7
--
with
-
config
-
file
-
path
=
/
usr
/
local
/
php7
/
etc
\
--
with
-
fpm
-
user
=
www
--
with
-
fpm
-
group
=
www
--
enable
-
fpm
--
enable
-
opcache
\
--
disable
-
fileinfo
--
with
-
mysqli
=
mysqlnd
--
with
-
pdo
-
mysql
=
mysqlnd
--
with
-
jpeg
-
dir
\
--
with
-
iconv
-
dir
=
/
usr
/
local
--
with
-
freetype
-
dir
&
nbsp
;
&
nbsp
;
--
with
-
png
-
dir
--
with
-
zlib
--
disable
-
rpath
\
--
with
-
libxml
-
dir
=
/
usr
--
enable
-
xml
&
nbsp
;
&
nbsp
;
--
enable
-
bcmath
--
enable
-
shmop
--
enable
-
exif
--
with
-
curl
\
--
enable
-
sysvsem
--
enable
-
inline
-
optimization
&
nbsp
;
&
nbsp
;
--
enable
-
mbregex
--
enable
-
inline
-
optimization
\
--
enable
-
mbstring
--
with
-
mcrypt
--
with
-
gd
--
enable
-
gd
-
native
-
ttf
--
with
-
openssl
\
--
with
-
mhash
--
enable
-
pcntl
--
enable
-
sockets
--
with
-
xmlrpc
--
enable
-
ftp
\
--
with
-
gettext
--
enable
-
zip
--
enable
-
soap
--
disable
-
ipv6
--
disable
-
debug
|
具体安装这里就不多说了,请自行翻看之前的文章==>传送门
二、配置修改
编译安装完php7之后,我们需要将配置文件中涉及的路径都更新为php7的实际路径,具体如下:
①、php-fpm.conf
1
2
3
4
5
6
7
8
|
#编辑
vim
/
usr
/
local
/
php7
/
etc
/
php
-
fpm
.
conf
#找到如下参数:
listen
=
/
dev
/
shm
/
php
-
cgi
.
sock
#改为
listen
=
/
dev
/
shm
/
php7
-
cgi
.
sock
#保存退出
:
wq
|
如此一来,php5.6和php7的sock监听文件分别为/dev/shm/php-cgi.sock和/dev/shm/php7-cgi.sock。
②、nginx配置
nginx配置只需要修改php动态解析的sock指向即可:
在站点对应的nginx配置文件中(比如,vhost/zhangge.net.conf )找到:
1
2
3
4
5
6
|
location
~
[
^
/
]
\
.
php
(
/
|
$
)
{
try
_files
$
uri
=
404
;
fastcgi
_pass
unix
:
/
dev
/
shm
/
php
-
cgi
.
sock
;
fastcgi_index
index
.
php
;
include
fastcgi
.
conf
;
}
|
将其中的
然后重启nginx就能将此站点环境更新到php7了。
说白了,就是你想让站点用哪个版本就修改为该版本的监听文件路径。当然,也有一些php用的是端口的监听模式,修改原理一致!
如果只是某些特殊的页面需要使用php的其他版本,也只要新增额外的location。假如,网站有一个目录是另外的建站程序,不支持php7,那么我们需要额外设置下即可:
更多需求,举一反三即可!
同样的,我们也可以修改fastcgi端口为9000以外的端口,在nginx中fastcgi_pass 127.0.0.1:端口号;通过不同端口来访问
三、启动脚本
在第二步,我们修改了php的配置,但是也没启动php。怎么启动很简单,我们先修改下服务脚本:
找到 PHP5.6 的服务脚本 /etc/init.d/php-fpm
现在,我们就可以使用 service php7 start 启动php7了,而之前的php5.6则继续使用 service php-fpm start 启动。
四、其他考虑
上述修改,只是让多个版本的php能够同时run起来,并未考虑多个版本的资源抢占问题。其实,还是有些许文章可以做的。
比如,php-fpm.conf 会对php的进程数量、响应超时等进行优化配置,很多时候我们都是用的单个php环境的最优配置。不过,当我们跑了多个php版本的时候,这些配置就应该折中考虑一下了。
就拿我博客举例,我使用nginx rewrite 定向,php5.6继续存在只是为了微信的一个插件,也就只是博客的小部分功能,其他绝大多数功能还是要用php7的,所以我在配置这个php-fpm的时候,会将php7的线程等资源给多一些,php5.6我就只给了一个主进程和一个子线程了。