vocus logo

方格子 vocus

實作系列 - 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
林柏宇的沙龍
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
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
本文介紹了在升級.NET專案時使用.NET Upgrade Assistant的方法,詳細說明瞭如何下載、安裝並使用此工具來實現跨版本升級,並提供了升版過程中的注意事項。
Thumbnail
本文介紹了在升級.NET專案時使用.NET Upgrade Assistant的方法,詳細說明瞭如何下載、安裝並使用此工具來實現跨版本升級,並提供了升版過程中的注意事項。
Thumbnail
透過案例分析,探討舊網站改版的必要性和目標,以及成功改版的關鍵包括網站設計、功能優化、SEO優化、響應式設計和內容優化。
Thumbnail
透過案例分析,探討舊網站改版的必要性和目標,以及成功改版的關鍵包括網站設計、功能優化、SEO優化、響應式設計和內容優化。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
舊網站改版是一個複雜的過程,而成功舊網站改版的關鍵在於確定清晰的目標和策略、基於用戶需求的設計、優化網站速度和性能、保持SEO優化,以及進行測試和迭代。
Thumbnail
舊網站改版是一個複雜的過程,而成功舊網站改版的關鍵在於確定清晰的目標和策略、基於用戶需求的設計、優化網站速度和性能、保持SEO優化,以及進行測試和迭代。
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News