移至主內容

Debian/Ubuntu 環境升級 PHP 版本

此篇文章主要記錄在Debian/Ubuntu系統上升級PHP-FPM(FastCGI Process Manager)版本,若你也有這樣的需求,可參考此篇文章來進行PHP版本的升級作業。本文示範的PHP版本為7.4,將升級到8.1版本,假如你使用其他不同的PHP版本也可以參考此篇文章來完成升級。

PHP目前一個版本的支援期為三年,這可從PHP官方網站查看版本支援期的文章。

**在執行PHP升級之前,請務必備份好主機資料,比如執行快照之類的。

**再升級之前,請確保基於PHP環境執行的軟體及所使用的第三方插件,都有支援要升級的PHP版本。

1)檢查系統環境上執行的PHP版本和相關套件。

Step 1:檢查Debian或Ubuntu系統執行的PHP版本,如下資訊可看到筆者主機環境所執行的PHP版本為7.4.32。

php -v

demo@kjnotes:~$ php -v
PHP 7.4.32 (cli) (built: Sep 29 2022 22:12:59) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.32, Copyright (c), by Zend Technologie

 

Step 2:檢查PHP使用的相關套件(Packages),如下資訊為筆者環境上有用到的PHP 7.4套件。

dpkg -l | grep php | tee packages.txt

demo@kjnotes:~$ dpkg -l | grep php | tee packages.txt
ii  php7.4-cli                        1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        command-line interpreter for the PHP scripting language
ii  php7.4-common                     1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        documentation, examples and common module for PHP
ii  php7.4-curl                       1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        CURL module for PHP
ii  php7.4-dev                        1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        Files for PHP7.4 module development
ii  php7.4-fpm                        1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        server-side, HTML-embedded scripting language (FPM-CGI binary)
ii  php7.4-gd                         1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        GD module for PHP
ii  php7.4-igbinary                   3.2.6+2.0.8-1+0~20210913.27+debian10~1.gbp64b0ea                           amd64        igbinary PHP serializer
ii  php7.4-imagick                    3.5.1-1+0~20210825.29+debian10~1.gbp4a47e2                                 amd64        Provides a wrapper to the ImageMagick library
ii  php7.4-json                       1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        JSON module for PHP
ii  php7.4-mbstring                   1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        MBSTRING module for PHP
ii  php7.4-memcached                  3.1.5+2.2.0-9+0~20210228.30+debian10~1.gbp2db493                           amd64        memcached extension module for PHP, uses libmemcached
ii  php7.4-msgpack                    2.1.2+0.5.7-6+0~20210301.28+debian10~1.gbpcc7388                           amd64        PHP extension for interfacing with MessagePack
ii  php7.4-mysql                      1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        MySQL module for PHP
ii  php7.4-opcache                    1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        Zend OpCache module for PHP
ii  php7.4-readline                   1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        readline module for PHP
ii  php7.4-xml                        1:7.4.32-1+0~20220929.71+debian10~1.gbpe9c007                              amd64        DOM, SimpleXML, XML, and XSL module for PHP

 

2)安裝所需要的PHP版本及編輯設定檔。

**如果你環境無法安裝你要的PHP版本,請查看此篇教學來完成新增第三方PHP儲存庫

Step 1:先將Debian/Ubuntu系統的套件資訊更新到最新。

sudo apt-get update -y

 

Step 2:安裝需要的PHP-FPM版本,比如筆者安裝了PHP 8.1版本。

**筆者本次教學範例是使用Nginx網頁伺服器,環境是安裝『PHP-FPM』。

sudo apt-get install php8.1-fpm -y

 

Step 3:將剛剛列出的PHP版本整理,比如筆者是7.4版本,那就從『php7.4』改成『php8.1』,範例如下:

**在安裝PHP Packages時,有時會遇到某些Packages在新版本有所變動,比如筆者遇到『php-json』在8.X預設就會安裝好,故無須安裝『php-json』的Packages。

sudo apt-get install php8.1-common php8.1-cli php8.1-common php8.1-curl php8.1-dev php8.1-fpm php8.1-gd php8.1-igbinary php8.1-imagick php8.1-mbstring php8.1-memcached php8.1-msgpack php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml -y

 

Step 4:備份PHP設定檔,及更改預設的參數。

sudo cp /etc/php/8.1/fpm/php.ini /etc/php/8.1/fpm/php.ini.backup

sudo vim /etc/php/8.1/fpm/php.ini

下面為筆者環境需要更改的參數,請依照你舊有的環境參數去替代變更:

max_execution_time = 100
max_input_vars = 2000
memory_limit = 256M
post_max_size = 64M
cgi.fix_pathinfo = 0
upload_max_filesize = 32MM

 

Step 5:重新載入PHP-FPM 8.1的設定檔

sudo systemctl reload php8.1-fpm

 

3)更改網頁伺服器的設定檔。

**筆者下面以Nginx網頁伺服器為例。

Step 1:更改Nginx網頁伺服器上config檔。

sudo vim /etc/nginx/sites-available/<nginx-config>

如下可看到『fastcgi_pass』,比如筆者舊的版本是『php7.4-fpm』,那就改成『php8.1-fpm.』:

fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;

 

Step 2:測試Nginx設定檔,查看執行有沒有錯誤及重新載入Nginx的config檔。

sudo nginx -t

如看到以下的訊息,則表示此次設定是正確的:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重新載入Nginx的config檔指令如下:

sudo systemctl reload nginx

 

Step 3:檢查網站是否正常執行,比如以筆者使用的架站工具來說,是可以直接在後台查看『狀態報告』和Log有沒有異常訊息。

 

4)刪除舊的PHP版本。

**建議可以觀察幾日服務是否能正常穩定運行,接著再進行刪除不必要的PHP版本。

Step 1:可以使用以下指令查看主機環境有運行的PHP版本:

sudo update-alternatives --list php

如下可看到環境有兩個PHP版本再運行,接下來的教學筆者會將PHP 7.4版本從系統移除:

demo@kjnotes:~$ sudo update-alternatives --list php
/usr/bin/php7.4
/usr/bin/php8.1

 

Step 2:執行『purge』指令從系統移除舊版的PHP相關套件,移除過程中會再跟你確認是否移除所有資料,選擇『Yes』進行移除。

sudo apt-get purge php7.4.* -y

 

Step 3:執行『autoclean』 及『 autoremove』指令來移除舊版PHP殘留的檔案。

sudo apt-get autoclean

sudo apt-get autoremove -y

 

Step 4:再次使用以下指令查看主機環境有運行的PHP版本:

sudo update-alternatives --list php

php -v

如下可看到僅剩下PHP 8.1版本:

demo@kjnotes:~$ sudo update-alternatives --list php
/usr/bin/php8.1
demo@kjnotes:~$ php -v
PHP 8.1.11 (cli) (built: Sep 29 2022 22:12:52) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.11, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.11, Copyright (c), by Zend Technologies

 

Step 5:再次檢查網站是否正常運行,服務皆有正常的話,就表示PHP版本升級順利完成。

 

此篇文章上次修改日期:
2022/10/16