
Ubuntu 如何安裝多個 PHP 版本?
Ubuntu 預設只內建一個 PHP 版本:Ubuntu 26.04 是 PHP 8.5,Ubuntu 24.04 是 PHP 8.3。網站需要其他版本,或要在同一台主機上同時跑多個版本時,就要加入 Ondřej Surý 維護的第三方套件來源。這篇整理安裝步驟、切換版本的方法,以及各版本的支援期限。
一、先確認要裝哪個版本
PHP 每個版本有 2 年的完整支援,之後再提供 2 年的安全性修補。依 php.net 公布的支援期限,目前仍有支援的版本是:
| 版本 | 發布日期 | 完整支援到 | 安全性修補到 |
|---|---|---|---|
| PHP 8.2 | 2022-12-08 | 2024-12-31 | 2026-12-31 |
| PHP 8.3 | 2023-11-23 | 2025-12-31 | 2027-12-31 |
| PHP 8.4 | 2024-11-21 | 2026-12-31 | 2028-12-31 |
| PHP 8.5 | 2025-11-20 | 2027-12-31 | 2029-12-31 |
這篇舊版介紹的 PHP 7.3、7.4、8.0,以及 8.1,都已經停止支援,不會再有安全性更新。還在用這些版本的網站,建議盡快規劃升級程式,而不是繼續安裝舊版本。
二、加入套件來源
Ubuntu 22.04、24.04:ppa:ondrej/php
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
Ubuntu 26.04:packages.sury.org
ppa:ondrej/php 沒有提供 Ubuntu 26.04 的套件,維護者正把套件移到 packages.sury.org。26.04 依官方的設定步驟加入:
sudo apt-get update
sudo apt-get -y install lsb-release ca-certificates curl
sudo curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt-get update
三、安裝指定版本
以 PHP 8.4 為例,其他版本把指令中的 8.4 換掉即可。各版本的套件可以並存,不會互相覆蓋。
搭配 NGINX 或 Apache 使用 PHP-FPM
sudo apt install php8.4-fpm php8.4-common php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-mysql php8.4-xml
Virtualmin 以 FCGI 模式執行
sudo apt install php8.4-cgi php8.4-common php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-mysql php8.4-xml
裝好後用 php8.4 -v 確認版本。
四、切換版本
命令列的預設版本
輸入 php 時執行哪個版本,用下面的指令選擇:
sudo update-alternatives --config php
這只影響命令列,例如排程與 Composer,不影響網站實際使用的版本。
網站使用的版本
網站用哪個版本,是在網站伺服器的設定裡指定的,每個網站可以不同:
- NGINX:在網站設定的
fastcgi_pass指向該版本的 socket,例如unix:/run/php/php8.4-fpm.sock - Virtualmin:在該網站的 PHP 設定中選擇版本
切換前先確認網站程式支援新版本,切換後檢查網站與錯誤記錄。
五、注意事項
- NGINX 的套件來源:在 Ubuntu 22.04、24.04 上,NGINX 主機可以另外加入
ppa:ondrej/nginx。使用 Virtualmin./install.sh --bundle LEMP安裝的主機請勿加入,請使用 Virtualmin 內建的 NGINX - 更新套件:加入套件來源後,用
sudo apt update更新清單、sudo apt upgrade更新套件,遇到相依性問題時先停下來確認,不要強制更新 - 慎用 apt autoremove:在 Ubuntu 22.04 上,
sudo apt autoremove可能移除舊系統仍需要的套件,執行前先看清楚它要移除哪些套件 - 移除不用的版本:確認沒有網站在使用後,再移除該版本的套件,避免主機上留著沒有安全更新的版本