如何在Ubuntu 18.04上安裝與管理多個PHP 7.x版本

前言

最近幾天,看Ubuntu 18.04也出一段時間了,後來也出了「Ubuntu 18.04.01」的版本。

看起來也成熟了,所以就從Ubuntu 16.04升級到Ubuntu 18.04了。

在本文章中,我們除了使用「PHPBrew」可以安裝與管理多個PHP版本之外,也可以直接安裝使用「apt-get」等相關指令在本機系統上安裝與管理多個PHP7.x的版本。

至於,PHP5.x版本嘛…..就沒有要敘述了

因為PHP 7.x是目前官方維護與主力的版本,所以就以PHP7.x為主要的版本作為教學。

前置環境

首先需要有下列的環境才可以繼續後面的步驟。

  1. 一個完整乾淨的Ubuntu 18.04

匯入第三方套件庫

因為Ubuntu 18.04官方預設PHP版本只有7.2,但是我們需要多個版本。

因此我們就需要仰賴第三方的套件來源庫幫助我們達成這件事情。

依序執行下列三個指令即可將第三方套件庫匯入。

在加入第三方套件來源的「add-apt-repository」指令中,在Ubuntu 18.04開始,會在加入後自動執行更新套件來源的動作,因次指令「sudo apt-get update」變成可做與可不做。


sudo add-apt-repository ppa:ondrej/php -y

sudo apt-get update

那有出現類似下面的截圖,就代表已經成功的把此第三方PHP來源套件成功匯入了。

接下來,我們可以透過下面的指令搜尋到有關的PHP套件。

不過裡面居然還有收錄「PHP-5.6」的,讓我深感意外……


sudo apt-cache search php | grep "php7.*-cli"

sudo apt-cache search php | grep "php5.*-cli"

分別執行這兩個指令之後,就會得到下面的截圖結果。

安裝PHP 7.0

把我們需要的PHP 7.0都匯入好之後,接著就可以安裝要的PHP版本了。

依照下面的指令來安裝PHP 7.0相關的擴展


sudo apt-get update

sudo apt-get install php7.0

當然,有些擴展可能我們會沒有安裝到,需要執行指令來另外安裝。

比如說,我們想要名為「mbstring」擴展,就要執行下面指令安裝。


sudo apt-get update

sudo apt-get install php7.0-mbstring

注意到了嘛?上面是示範安裝「PHP 7.0」部份,我們不難發現,若是要安裝其他的版本,則只要將「7.0」改成「7.1」,「7.2」與「7.3」等字樣即可。

在終端機上切換多個版本

在終端上「terminal」,我們可以使用下列的指令進入互動模式輕易的做到多版本切換:


sudo update-alternatives --config php

接著就會出現跟下面一樣的截圖,選擇相對應的數字即可切換到想要的PHP版本。

若是不想進入互動模式,也可以直接設定執行PHP版本路徑。


sudo update-alternatives --set php /usr/bin/php7.1

在Nginx上切換多個版本

前一章節中為示範在終端機上切換多個PHP版本,那在Nginx上也可以做到同樣的事情。

我們只要使用下面幾個步驟,即可在Nginx上面切換多個版本。

安裝Nginx

如果安裝了,這步驟可以先跳過。


sudo apt-get update

sudo apt-get install nginx

安裝相對應版本的PHP FPM

FPM, 全名是「Fast CGI process manager」,Nginx是把PHP當作Fast-CGI跑,因此需要安裝相對應PHP版本的FPM套件,我們可以使用下列指令來安裝:

安裝,PHP 7.0使用,套件名稱就是「php7.0-fpm」,PHP 7.1就是「php-7.1-fpm」,以此類推。


sudo apt-get update

sudo apt-get install php7.0-fpm

接著,修改Nginx sites設定。使用下列指令並找到下面相關的語句把註解拿掉以便啟用PHP-FPM。


sudo vim /etc/nginx/sites-available/default


# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}

 

其中,注意到「fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;」這行。

不難發現這是需要指定我們真正要運行的PHP 7.1的版本。那其他版本也是照之前的規則做更動。

下面的指令步驟即是在Nginx上面切換不同版本PHP-FPM,假設使用PHP 7.0


sudo update-alternatives --config php

sudo service php7.0-fpm start

# 找到有-fpm.sock等字樣並取代成相對應的php-fpm.sock

sudo sed -i 's/php7.*-fpm.sock/php7.0-fpm.sock/g' /etc/nginx/sites-available/default

sudo service nginx restart

結論

這篇文章,你已經學到了:

  1. 在Ubuntu 18.04上安裝與管理多個PHP版本
  2. 在終端機與Nginx上切換與使用不同PHP版本

參考文章與延伸閱讀