Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

[DevOps]Debian與Ubuntu從php7升級到php8

內容目錄

Debian與Ubuntu從php7升級到php8

因為php7.4將於2022年年底停止安全性更新,因此手上有些專案必須跟著升級,這邊紀錄升級的過程。主要參考於這篇文章,我就順便做繁中化整理。若有錯誤請再留言告知。我是使用Debian版本,已經順利完成升級。


How to install/update PHP 8.0 (Debian/Ubuntu)

如何安裝/升級PHP 8.0(Debian/Ubuntu)

PHP 8.0中的擴充與相依更動

  1. 預設具備JSON擴充,不需要再安裝php-json就可以使用。
  2. xmlrpc擴充轉移至PECL,PHP8.0中不再具備名為xmlrpc的擴充。
  3. GD擴充在Windows中從php_gd2.dll更改為php_gd.dll

PHP 8.0中的INI更動。

  1. Assertions throw exceptions by default - (assert.exception=1)
    預設狀態下斷言會丟出意外判斷。

  2. Default error display is set to E_ALL - (error_reporting=-1)
    預設錯誤顯示設定於E_ALL。

  3. Startup errors are displayed by default - (display_startup_errors=1)
    預設狀態下,會顯示啟動錯誤。

PHP 8.0新的JIT添加了幾個新的 INI 指令。
zend.exception_string_param_max_len INI 設定用於可設定的異常堆疊(stack)來追蹤字符串長度

安裝/升級步驟

1.列出現在的PHP套件(packages)

主要是從目前的套件清單直接做參考升級。

dpkg -l | grep php | tee packages.txt
2.加入 ondrej/php PPA

這邊會為PPA新增套件的來源,包含所有PHP套件以及相依項目,例如argon2和libzip。

Ubuntu

sudo add-apt-repository ppa:ondrej/php # Press enter when prompted.
sudo apt-get update

Debian

sudo apt install apt-transport-https lsb-release ca-certificates wget -y
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg 
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update
3.安裝PHP8.0擴充

所有PHP8.0的套件都遵循php8.0-NAME 命名模式。這邊將安裝數個根據php8.0-common的擴充以及用於PHP 8.0的CLI。

使用CLI安装PHP 8.0

sudo apt install php8.0-common php8.0-cli -y

這時可以確認版本,注意,如果是升級的話應該還是原版本

php -v # Show PHP version.
php -m # Show PHP modules loaded.
其他擴充

這時可以安裝其他擴充,但我沒做這段,例如

sudo apt install php8.0-{bz2,curl,intl,mysql,readline,xml}
sudo apt install php8.0-pcov # PCOV code coverage tool
sudo apt install php8.0-xdebug # Xdebug debugger
安裝伺服器API

根據所使用的Web伺服器,需要安裝其他套件與伺服器整合。

如果是Apache使用mpm_event、Nginx, Litespeed,可以使用php8.0-fpm

sudo apt install php8.0-fpm

如果是Apache使用 mod_php,則安裝 libapache2-mod-php8.0。

sudo apt install libapache2-mod-php8.0
4.測試PHP8.0的安裝

測試一下剛剛的安裝結果,如果是升級的話應該還是原版本

php -v
php -m
# php -v
PHP 8.0.0-dev (cli) (built: Oct 4 2020 14:04:36) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies

# php -m
[PHP Modules]
Core
ctype
curl
...
..
.
5.清除舊的PHP版本

這時可以看看主機內有安裝的PHP環境

sudo update-alternatives --config php
There are 2 choices for the alternative php (providing /usr/bin/php).
Selection Path Priority Status

------------------------------------------------------------

* 0 /usr/bin/php8.0 80 auto mode
1 /usr/bin/php7.4 74 manual mode
2 /usr/bin/php8.0 80 manual mode

Press to keep the current choice[*], or type selection number:

如果舊版為PHP7.4

sudo apt purge '^php7.4.*'
6.重開機

對,記得重開伺服器

reboot