5

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

 3 years ago
source link: https://zhang.ge/5088.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Jager · 2月27日 · 2016年nginx配置 7590次已读

年前,终于迎来了期待已久的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
#保存退出

如此一来,php5.6和php7的sock监听文件分别为/dev/shm/php-cgi.sock和/dev/shm/php7-cgi.sock。

②、nginx配置

nginx配置只需要修改php动态解析的sock指向即可:

在站点对应的nginx配置文件中(比如,vhost/zhang.ge.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
#最后保存退出

现在,我们就可以使用 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的安装和配置基本也都是从他的脚本中扒的,好吧,就当我也伪原创了一把。。。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK