1. 程式人生 > 其它 >分享一下php7和其他php多版本共存的配置教程

分享一下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 的安裝和配置基本也都是從他的指令碼中扒的,好吧,就當我也偽原創了一把。。。