分享一下php7和其他php多版本共存的配置教程

年前,终于迎来了期待已久的 php7 正式版,我也在第一时间就给博客用上了。性能确实有了质的飞跃,问题还是有不少的。比如鱼叔的微信插件在 php7 下面自动回复异常等。

为了继续使用微信插件,我只好将 php5.6 又开了起来,下面简单分享一下多个版本 php 共存的方法。

一、编译路径

多个版本 php 要共存,必须使用不同的安装路径。比如,之前 php5.6 安装在/usr/local/php,那么我们安装 php7 的时候,就应该定义到 /usr/local/php7 等不一样的路径。

就如之前 php7 编译安装分享的那样,把安装目录和配置文件目录都指向新的路径:

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  --with-png-dir --with-zlib --disable-rpath \
--with-libxml-dir=/usr --enable-xml  --enable-bcmath --enable-shmop --enable-exif --with-curl \
--enable-sysvsem --enable-inline-optimization  --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

#编辑
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 )找到:

location ~ [^/]\.php(/|$) {
                try_files $uri =404;
                fastcgi_pass  unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                include fastcgi.conf;
             }

将其中的

fastcgi_pass  unix:/dev/shm/php-cgi.sock;
改为:
fastcgi_pass  unix:/dev/shm/php7-cgi.sock; #路径改为和该版本php的sock监听路径一致

然后重启 nginx 就能将此站点环境更新到 php7 了。

说白了,就是你想让站点用哪个版本就修改为该版本的监听文件路径。当然,也有一些 php 用的是端口的监听模式,修改原理一致!

如果只是某些特殊的页面需要使用 php 的其他版本,也只要新增额外的 location。假如,网站有一个目录是另外的建站程序,不支持 php7,那么我们需要额外设置下即可:

location /wap {
                try_files $uri =404;
                fastcgi_pass  unix:/dev/shm/php-cgi.sock; #对于/wap这个路径,使用php5.6
                fastcgi_index index.php;
                include fastcgi.conf;
              }

更多需求,举一反三即可!

三、启动脚本

在第二步,我们修改了 php 的配置,但是也没启动 php。怎么启动很简单,我们先修改下服务脚本:

找到 PHP5.6 的服务脚本 /etc/init.d/php-fpm

#复制一份:
cp /etc/init.d/php-fpm /etc/init.d/php7
#编辑修改:
vim /etc/init.d/php7
#找到
prefix=/usr/local/php
#改为
prefix=/usr/local/php7
#最后保存退出
:wq

现在,我们就可以使用 service php7 start 启动 php7 了,而之前的 php5.6 则继续使用 service php-fpm start 启动。

四、其他考虑

上述修改,只是让多个版本的 php 能够同时 run 起来,并未考虑多个版本的资源抢占问题。其实,还是有些许文章可以做的。

比如,php-fpm.conf 会对 php 的进程数量、响应超时等进行优化配置,很多时候我们都是用的单个 php 环境的最优配置。不过,当我们跑了多个 php 版本的时候,这些配置就应该折中考虑一下了。

就拿我博客举例,我让 php5.6 继续存在只是为了微信的一个插件,也就只是博客的小部分功能,其他绝大多数功能还是要用 php7 的,所以我在配置这个 php-fpm 的时候,会将 php7 的线程等资源给多一些,php5.6 我就只给了一个主进程和一个子线程了。

好了,以上内容就是 php 多版本共存分享,充分理解下 nginx 和 php 的交互,本文分享可有可无。

2016-3-2:分享一个纯属巧合的事情,早上搜索资料的时候,发现 linuxeye.com--linux 运维笔记比我更早的发布了 php 多版本共存教程,而且更是巧合的是,改的方式都基本一致。。。搞得好像是我抄袭的一样 o(︶︿︶)o 不过 php 的安装和配置基本也都是从他的脚本中扒的,好吧,就当我也伪原创了一把。。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

【 ES 私房菜】收集 Nginx 访问日志

在上一篇系列文章《【 ES 私房菜】收集 Apache 访问日志》中,我们已经完成了 ES 收集 A pache 日志的目标,再收集其他 WEB 日志也就小菜一...

8070
来自专栏用户2442861的专栏

2013年 腾讯笔试题:fork()

如果你对fork()的机制比较熟悉的话,这个题并不难,输出应该是6个“-”,但是,实际上这个程序会很tricky地输出8个“-”。

1171
来自专栏coding for love

进程与线程,单核与多核1. 简介2. 程序3. 进程4. 线程5. 多进程与多线程的选择6. 小结参考

用户打开浏览器,其实就是打开了浏览器应用程序。那么什么是程序呢?我们常说浏览器是多线程的,JS 是单线程的,那么什么是线程呢?说到线程,和我们常说的进程有什么关...

3803
来自专栏恰童鞋骚年

操作系统核心原理-6.外存管理(下)文件系统

  磁盘具有大容量、低成本以及持久化的特点,即使发生断电,磁盘上的数据也不会丢失。但是,对于一般用户而言,使用磁盘是非常苦难的,因为他们不知道如何驱动一个磁盘,...

1083
来自专栏IT笔记

Grafana+Prometheus打造全方位立体监控系统

前言 本文主要介绍如何使用Grafana和Prometheus以及node_exporter对Linux服务器性能进行监控。下面两张图分别是两台服务器: 服务器...

99513
来自专栏人人都是极客

进程、线程之间的爱恨纠葛...

当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程。

1813
来自专栏北京马哥教育

运维架构师进阶:Linux进程管理

来源:IBM 译者:ljianhui 链接:blog.csdn.net/ljianhui/article/details/46718835 1.1 Linu...

3899
来自专栏逸鹏说道

memcached安装及.NET中的Memcached.ClientLibrary使用详解

序言 吹吹牛逼先,借我你的20分钟,保证你在.net中使用memcached缓存数据,畅通无阻,提升数据读取效率,分担数据库压力,便不在话下。 本篇主要说下:m...

2967
来自专栏古时的风筝

用python实现的百度音乐下载器-python-pyqt-改进版

之前写过一个用python实现的百度新歌榜、热歌榜下载器的博文,实现了百度新歌、热门歌曲的爬取与下载。但那个采用的是单线程,网络状况一般的情况下,扫描前100首...

3138
来自专栏BeJavaGod

权限设计(上) - 数据库表设计

web权限设计,做权限目前有三种主流实现方式 第一种:手动实现   配置2个拦截器,一个是拦截是否登陆,一个是拦截url的权限,通过角色权限表的配置,把权限ur...

4955

扫码关注云+社区

领取腾讯云代金券