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-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 = 32M
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版本升級順利完成。