PHP 在Apache上或者應該說在一台伺服器上通常只會有一個版本,但是有時可能會遇到像是不同的專案需要不同版本,但是卻跑在同一台機器上
這時候就需要多個版本的PHP 支援了
然而這件事情在Windows IIS上很容易的可以用PHP Manager套件直接對不同的站體設定不同版本的PHP
在Linux 上確實沒有這麼容易可以用個小設定就解決,但是也不難就是了,這次要介紹的是php-fpm 的做法
首先,如果你的PHP 版本太舊會建議先升到5.6版,如果不知道怎麼升級請參考上一篇文章 :PHP 版本更新, Apache上如何設定
參考文件 :Run multiple PHP version on the same server using php-fpm and xdebug on Ubuntu 16.04
步驟一 :將要使用的PHP 版本以及相關套件安裝完成#
sudo su
add-apt-repository ppa:ondrej/php
apt-get update
apt-get install libapache2-mod-fastcgi php5.6-fpm php5.6 php5.6-dev php5.6-mcrypt php5.6-mbstring php5.6-mysql php5.6-zip php5.6-gd php5.6-xml php7.1-fpm libapache2-mod-fastcgi php7.1-fpm php7.1 php7.1-dev php7.1-mbstring php7.1-mysql php7.1-zip php7.1-gd php7.1-xml php7.1-curl php7.1-intl php7.1-json php7.1-mcrypt這個範例跟上一篇要安裝PHP 5.6時相同,需要先將軟體源ppa:ondrej/php 加入,最後一行指令安裝了很多東西,如果你已經是PHP 5.6
或者透過上一篇的方式升級到PHP 5.6的朋友安裝的時候可以跳過PHP 5.6版的內容,大概會像以下這樣
sudo apt-get install libapache2-mod-fastcgi php5.6-fpm php7.1-fpm libapache2-mod-fastcgi php7.1-fpm php7.1 php7.1-dev php7.1-mbstring php7.1-mysql php7.1-zip php7.1-gd php7.1-xml php7.1-curl php7.1-intl php7.1-json php7.1-mcrypt但是 php 5.6-fpm還是必須要的!
接下來必須啟用兩個模組
sudo a2enmod actions
sudo a2enmod fastcgi基本上安裝到這邊結束,接下來就是設定Apache的部分了
步驟二 :設定Apache 虛擬站台config#
原作者說,需要在每個站台的config 加入下面這段設定值,但是經過測試,有會站台因為這段設定值而無法啟動
所以如果加了這段設定值後無法啟用站台請移除他
<IfModule mod_fastcgi.c>
AddHandler php56-fcgi-www .php
Action php56-fcgi-www /php56-fcgi-www
Alias /php56-fcgi-www /usr/lib/cgi-bin/php56-fcgi-www
FastCgiExternalServer /usr/lib/cgi-bin/php56-fcgi-www -socket /run/php/php5.6-fpm.sock -pass-header Authorization
<Directory "/usr/lib/cgi-bin">
Require all granted
</Directory>
</IfModule>
<IfModule mod_fastcgi.c>
AddHandler php71-fcgi-www .php
Action php71-fcgi-www /php71-fcgi-www
Alias /php71-fcgi-www /usr/lib/cgi-bin/php71-fcgi-www
FastCgiExternalServer /usr/lib/cgi-bin/php71-fcgi-www -socket /run/php/php7.1-fpm.sock -idle-timeout 1800 -pass-header Authorization
<Directory "/usr/lib/cgi-bin">
Require all granted
</Directory>
</IfModule>
<IfModule mod_fastcgi.c>
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler php71-fcgi-www
</FilesMatch>
</IfModule>接著,在每個站台的config 加入設定值,指定用哪個版本的PHP來執行
<VirtualHost *:80>
...
<IfModule mod_fastcgi.c>
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler php56-fcgi-www
</FilesMatch>
</IfModule>
...
</VirtualHost>範例是指定用PHP 5.6來執行所以指定為php 56-fcgi-www
如果要用PHP 7.1 那麼請指定為php 71-fcgi-www
接著重新啟動apache 就可以了
最後來看一下結果是不是對的
首先我們將Config 中的setHandler 設定為php 56-fcgi-www,透過phpinfo() 來看一下實際跑的版本是什麼

確實沒有錯,接著變更成7.1

也沒有問題,那麼就大功告成了!
