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