實作系列 - 5: PHP 升版流程與實作(2)

更新於 發佈於 閱讀時間約 6 分鐘

這次的文章將詳細敘述我在進行版本升級時所採取的步驟,以及在升級過程中遇到的問題。所使用的語言與框架分別為 PHP 和 Laravel。不過,我認為即使是不同的語言或框架,大致上的升級作法應該相去不遠。

步驟一—確認目標版本

假設我們現在要將 PHP 版本從 8.0 升級至 8.2,首先會進行升級至 8.1 的過程,並查詢 Laravel 是否有對應的版本升級。

幸運的是,這次 PHP 的版本升級正好可以與框架升級同步進行,將 Laravel 從 9.0 升級至 10.0。

步驟二—查詢官方文件

需要參考的主要文件包括 PHP 官方文件Laravel 官方文件,以及針對版本的相關 issue。從 PHP 文件來看,並沒有棄用的功能;而 Laravel 則有關於 Composer 和資料庫相關內容的要求與調整,這些部分將會在下一步驟中進行程式碼層面的調整,目前只需記錄下來。

另外,如果是 PHP 5.4 以上的版本,也可以使用 PHPCompatibility 這個套件。下載後執行以下指令:

/.config/composer/vendor/bin/phpcs -n -p . --standard=PHPCompatibility --runtime-set testVersion 8.1 --report-full=./mylog.log --extensions=php --ignore="vendor"

此指令會初步檢查程式碼是否有需要調整的地方。

步驟三—確認套件

接下來,我們需要確認 composer.json 中的套件是否需要升級,或著是否需要替換為其他套件。原則上,應該逐一確認每個套件。除了進入套件的 Git 頁面查看版本相容資訊外,也可以利用 Can I upgrade Laravel yet?laravelshift 來進行檢查。

當然,如果有前人留下的 changelog,那就再好不過了。

步驟四—更新版本

調整 composer.json

根據前一步驟獲得的版本列表,我們首先手動調整 composer.json 中的套件至所需版本,並將棄用的套件刪除。

接著執行套件更新的指令:composer update <異動的套件名稱> -W --ignore-platform-reqs

其中,-W--with-all-dependencies 會更新指定的套件及其所有相關依賴套件,--ignore-platform-reqs 則會忽略平台要求,包括 PHP 版本和 PHP 擴展。

對了,這個指令也會更新 composer.lock ,因此可以根據檔案異動驗證更新的套件是否正確。

調整程式碼

由於套件的更新與棄用,程式碼本身也需要做相應調整。在更新套件後,調整程式碼的同時也能檢查是否會引發錯誤。

調整完成後,可以執行檢測高敏感性套件的指令:composer diagnose

此指令可以幫助檢查是否有其他需要調整的套件。

調整容器設定

除了之前調整過的 composer.json 中的 PHP 版本外,不要忘記容器中的 PHP 版本與框架版本也需要同步調整!

啟動容器並再次調整

設定完成後,我們可以啟動容器來確認其是否能正常運行。不過,這時如果啟動失敗也是正常的情況,我們可以根據 log 訊息再次調整套件與程式碼。

舉例來說,我曾在這個步驟回頭調整資料庫關聯與 Redis 設定,或者在啟動時發現 PHP 的依賴項需要調整,這時可能需要在 buildspec.yml 中新增相應的依賴(指令:apt-get install -y --no-install-recommends php8.2-soap)。

整體過程是:啟動容器 → 自動化測試 → 手動測試 → 調整程式碼與套件。經過幾輪反覆調整與測試,當所有測試都通過後,就代表升級工作完成了!

其他問題

更新不在 composer.json 中的套件

在使用指令檢查套件版本時,有時會發現某些依賴套件出現在 composer.lock 中,但並未列於 composer.json

首先,我們需要執行以下指令來確認該套件是由哪個套件依賴的:composer why <套件名稱>

如果確認該依賴套件符合原本套件的版本,但不符合 PHP 版本要求,我們可以考慮將該依賴套件加入 composer.json 進行版控。


這次的升版介紹就到這裡,希望看完後,大家能夠掌握如何進行版本升級的流程!

參考資料

  1. https://medium.com/asiayo-engineering/php-laravel-升版準備及流程分享-7822ffc1e4be
  2. https://laravelshift.com/can-i-upgrade-laravel
  3. https://laravelshift.com/
留言
avatar-img
留言分享你的想法!
avatar-img
林柏宇的沙龍
2會員
57內容數
test
林柏宇的沙龍的其他內容
2025/06/29
在本篇文章中,我將分享我在升級 PHP 版本過程中的經驗,並探討升級的重要性及其主要流程。升級不僅能修復漏洞,更能確保專案持續獲得支持。為了順利升級,我們需要確認目標版本、查閱官方文件、檢查套件相容性,並利用自動化測試來提高測試效率。本篇文章還將提供具體的升級步驟建議,幫助讀者有效地進行升級工作。
Thumbnail
2025/06/29
在本篇文章中,我將分享我在升級 PHP 版本過程中的經驗,並探討升級的重要性及其主要流程。升級不僅能修復漏洞,更能確保專案持續獲得支持。為了順利升級,我們需要確認目標版本、查閱官方文件、檢查套件相容性,並利用自動化測試來提高測試效率。本篇文章還將提供具體的升級步驟建議,幫助讀者有效地進行升級工作。
Thumbnail
2025/06/22
在當前的數位時代,安全性成為網頁設計與使用的關鍵。本篇文章將深入探討兩種常見的網頁攻擊手法:跨站請求偽造(CSRF)和跨站腳本攻擊(XSS)。CSRF 利用使用者對網站的信任,進行未經授權的操作,而 XSS 則是透過注入惡意腳本來偷取敏感資料。本文還提供了防範這些攻擊的實用措施,以提升網頁的安全性。
Thumbnail
2025/06/22
在當前的數位時代,安全性成為網頁設計與使用的關鍵。本篇文章將深入探討兩種常見的網頁攻擊手法:跨站請求偽造(CSRF)和跨站腳本攻擊(XSS)。CSRF 利用使用者對網站的信任,進行未經授權的操作,而 XSS 則是透過注入惡意腳本來偷取敏感資料。本文還提供了防範這些攻擊的實用措施,以提升網頁的安全性。
Thumbnail
2025/06/15
這篇文章整理了幾個實用的 PHP 開發技巧,包含使用 sprintf() 組合字串、使用 match 簡化判斷式、API 參數模組化、資料庫鎖的使用時機以及注意事項,還有如何避免 SQL 與高併發問題。透過這些技巧,可以有效提升程式碼的可讀性、維護性和效能。
Thumbnail
2025/06/15
這篇文章整理了幾個實用的 PHP 開發技巧,包含使用 sprintf() 組合字串、使用 match 簡化判斷式、API 參數模組化、資料庫鎖的使用時機以及注意事項,還有如何避免 SQL 與高併發問題。透過這些技巧,可以有效提升程式碼的可讀性、維護性和效能。
Thumbnail
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
本文介紹了在升級.NET專案時使用.NET Upgrade Assistant的方法,詳細說明瞭如何下載、安裝並使用此工具來實現跨版本升級,並提供了升版過程中的注意事項。
Thumbnail
本文介紹了在升級.NET專案時使用.NET Upgrade Assistant的方法,詳細說明瞭如何下載、安裝並使用此工具來實現跨版本升級,並提供了升版過程中的注意事項。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News