PHP 在Apache 上跑多個版本,以PHP 5.6與PHP 7.1為例
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 版本以及相關套件安裝完成
1 2 3 4 |
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版的內容,大概會像以下這樣
1 |
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還是必須要的!
接下來必須啟用兩個模組
1 2 |
sudo a2enmod actions sudo a2enmod fastcgi |
基本上安裝到這邊結束,接下來就是設定Apache的部分了
步驟二 :設定Apache 虛擬站台config
原作者說,需要在每個站台的config 加入下面這段設定值,但是經過測試,有會站台因為這段設定值而無法啟動
所以如果加了這段設定值後無法啟用站台請移除他
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<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來執行
1 2 3 4 5 6 7 8 9 |
<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
也沒有問題,那麼就大功告成了!
首頁 » 技術文章 » 架站 » PHP 在Apache 上跑多個版本,以PHP 5.6與PHP 7.1為例