老專案大翻修:我從 PHP 7.4 升級到 8.3 的血淚實錄

更新 發佈閱讀 7 分鐘

在 CentOS 7 上與 Apache 奮戰的一週


raw-image

前言:一場不只是版本號的升級

原本,我手上的老系統穩穩地跑在 PHP 7.4 + CentOS 7,一切看似正常。

但客戶強烈要求升級 PHP,因為舊版本不再安全,也無法滿足新的套件需求。

年初時,我就開始研究升級方案,發現 從 PHP 7.4 升級到 8.1 或 8.3 都有相容性挑戰,但 PHP 每年都有小版本更新,長遠看直接升到最新版本其實更划算。

我知道年底就會有 PHP 8.4,而我在發文時已經是 12 月,PHP 8.5 也即將釋出

於是,我決定 直接升級到當時最新的 PHP 8.3,希望一次解決安全、性能與相容性問題,也能為後續版本更新做好鋪墊。

換句話說,這次升級不是「想換就換」,而是一場 客戶需求 + 技術債清算 + 長遠規劃 的綜合戰。

我以為只是換個版本號,結果牽動了 Apache、模組、Thread 模式,甚至整個系統的配置。



⚙️ Step 1:備份永遠是第一步

在任何升級前,我都會先備份所有設定與資料:

  • /etc/php.ini 與 /etc/php.d/ 下的設定檔
  • Apache 的虛擬主機設定
  • 網站原始碼與資料庫

這一步看似老掉牙,但每次升級都證明:


「沒備份的勇氣,最後都變成重裝的淚水。」



🔧 Step 2:從 Remi 安裝 PHP 8.3

CentOS 7 的官方套件庫最多只到 PHP 5.x,要升級到 8.3,必須透過 Remi Repository

sudo yum install epel-release -y
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
sudo yum-config-manager --enable remi-php83
sudo yum install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json -y

安裝後確認 libphp.so 是否存在:

ls /usr/lib64/httpd/modules/ | grep libphp

🧱 Step 3:Apache 與 PHP 的「兼容性鬥爭」

理論上,啟用模組、修改 /etc/httpd/conf.d/php.conf 加上:

LoadModule php_module modules/libphp.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

然後重啟 Apache 就搞定。


但結果,我得到這句令人心碎的錯誤:


Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.
AH00013: Pre-configuration failed

意思是:


Apache 跑的是「多執行緒模式 (threaded MPM)」,但 PHP 模組是「非線程安全版」。 他們根本無法共存。



🧯 Step 4:切換 MPM 模式(救火現場)

解法是改用非執行緒的 MPM 模式,也就是 prefork

編輯:

/etc/httpd/conf.modules.d/00-mpm.conf

將:

# LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

改成如上後,執行:

sudo apachectl configtest
sudo systemctl restart httpd

這時候 Apache 終於乖乖啟動了,info.php 也能正常顯示 PHP 8.3 的版本資訊。


🧪 Step 5:測試與驗證

/var/www/html/ 裡放上最經典的一段:

<?php phpinfo(); ?>

開啟瀏覽器輸入 http://your_server_IP/info.php,看到那張紫藍色的資訊頁面時,

真的有種「打贏 Boss」的爽感。


🧭 小結:升級後的世界

這次升級讓我重新體會到幾件事:

  • PHP 8.3 的效能與語法進步非常明顯。
  • 老專案一定會遇到相容性問題,特別是棄用函數(像 each()、create_function())。
  • PHP 7.4 雖然還是很多人用,但已經完全停止官方安全更新。 留在那個版本,意味著所有漏洞都要自己扛。
  • 考慮到 PHP 每年都會更新,小版本的維護其實更容易; 直接升到最新版本,長遠看反而省事。
  • CentOS 7 與新版 PHP 的兼容性越來越尷尬,未來真的該考慮整體遷移。
  • 文章發文時已經 12 月,PHP 8.5 也即將釋出,這次升級算是為下一波版本更新提前鋪路。

💬 後記:那些升級後才知道的事

升級 PHP 這件事,看似是技術問題,但其實更多是「心態轉換」。

以前我總覺得:「反正能跑就好」, 但當一個系統太久沒動,就像長滿灰塵的機器,哪天要重啟時,你才發現一堆零件都不再支援。

這篇紀錄,希望能讓還在猶豫升級的工程師們少踩一些坑。

如果你現在的系統還停在 7.4 或更舊版本,請記得: 👉 現在升級,也許麻煩;但不升級,未來會更麻煩。


留言
avatar-img
麟製所
2會員
53內容數
軟體、旅遊分享
麟製所的其他內容
2025/12/09
讓 AI 秒懂當地特色商品,旅遊購物不再踩雷! 🌟 為什麼需要這個 Prompt? 你是否遇過這些困擾: 📸 不確定商品是不是當地特產 🤔 擔心買到外地貨或被坑 ⏰ 沒時間逐一搜尋商品資訊 🎯 想快速判斷商品是否值得購買 💼 需要批量整理伴手禮商品資料
2025/12/09
讓 AI 秒懂當地特色商品,旅遊購物不再踩雷! 🌟 為什麼需要這個 Prompt? 你是否遇過這些困擾: 📸 不確定商品是不是當地特產 🤔 擔心買到外地貨或被坑 ⏰ 沒時間逐一搜尋商品資訊 🎯 想快速判斷商品是否值得購買 💼 需要批量整理伴手禮商品資料
2025/12/02
還在一張張翻看監視器照片嗎?這個 Python 小工具只要雙擊執行檔,選擇照片資料夾,就能自動產生 MP4 縮時影片,支援 NAS/UNC 路徑、自動補檔名、時間戳和標籤,大幅提升回顧效率!
Thumbnail
2025/12/02
還在一張張翻看監視器照片嗎?這個 Python 小工具只要雙擊執行檔,選擇照片資料夾,就能自動產生 MP4 縮時影片,支援 NAS/UNC 路徑、自動補檔名、時間戳和標籤,大幅提升回顧效率!
Thumbnail
2025/11/25
這篇文章說明如何在 Google Apps Script 中安全地管理環境變數和 API Key,並有效地在多個專案間共用設定,避免將敏感資料硬編碼在程式碼中。
2025/11/25
這篇文章說明如何在 Google Apps Script 中安全地管理環境變數和 API Key,並有效地在多個專案間共用設定,避免將敏感資料硬編碼在程式碼中。
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
別讓你的房子,變成家中最大的「閒置資產」 作為一名服務高淨值客戶的私人銀行顧問,我每天的任務只有一個:幫客戶「讓錢滾動」。然而,當我觀察身旁許多同樣育有子女的朋友們,即便他們多半已是職場上的中高階主管,表面上看似光鮮亮麗,有房有車;但實際上,大家都是典型的「夾心世代」。每個月薪水一入帳,扣掉沉重的
Thumbnail
別讓你的房子,變成家中最大的「閒置資產」 作為一名服務高淨值客戶的私人銀行顧問,我每天的任務只有一個:幫客戶「讓錢滾動」。然而,當我觀察身旁許多同樣育有子女的朋友們,即便他們多半已是職場上的中高階主管,表面上看似光鮮亮麗,有房有車;但實際上,大家都是典型的「夾心世代」。每個月薪水一入帳,扣掉沉重的
Thumbnail
【韓規代購|Jaguar F-Type 敞篷跑車|讓記憶與熱情再次被點亮】 Oscar 老師,是業界相當知名的小提琴指導老師。年輕時遠赴歐洲攻讀音樂研究所,在那段專注於音樂、也努力追夢的日子裡,他的座駕是一部 Jaguar 四門轎車。 那是屬於他青春的一部分── 音樂、歐洲街景、與那台英倫紳士
Thumbnail
【韓規代購|Jaguar F-Type 敞篷跑車|讓記憶與熱情再次被點亮】 Oscar 老師,是業界相當知名的小提琴指導老師。年輕時遠赴歐洲攻讀音樂研究所,在那段專注於音樂、也努力追夢的日子裡,他的座駕是一部 Jaguar 四門轎車。 那是屬於他青春的一部分── 音樂、歐洲街景、與那台英倫紳士
Thumbnail
未來職場,硬實力不再是唯一門票 在這個 AI、自動化與數位轉型快速推陳出新的時代,職場競爭已經進入全新局面。過去我們常強調「硬實力」的重要,例如專業技能、學歷、證照等,這些確實能幫助一個人進入職場。但問題是:當 AI 能在幾秒鐘完成複雜計算,當自動化系統能取代大量重複性工作,僅靠硬實力真
Thumbnail
未來職場,硬實力不再是唯一門票 在這個 AI、自動化與數位轉型快速推陳出新的時代,職場競爭已經進入全新局面。過去我們常強調「硬實力」的重要,例如專業技能、學歷、證照等,這些確實能幫助一個人進入職場。但問題是:當 AI 能在幾秒鐘完成複雜計算,當自動化系統能取代大量重複性工作,僅靠硬實力真
Thumbnail
系統專案架構 開始進入開發系統之前,我們要來先想一下專案架構要怎麼做。 前後端分離 現在比較流行的架構是前後端分離。比較常見的方案是前後端個一個專案各自一個檔案。但這樣子分離的話對於 vibing code 比較難,畢竟你兩個專案都開著你要同時個別和他們說要做什麼,有點不太切實際又麻煩。 所
Thumbnail
系統專案架構 開始進入開發系統之前,我們要來先想一下專案架構要怎麼做。 前後端分離 現在比較流行的架構是前後端分離。比較常見的方案是前後端個一個專案各自一個檔案。但這樣子分離的話對於 vibing code 比較難,畢竟你兩個專案都開著你要同時個別和他們說要做什麼,有點不太切實際又麻煩。 所
Thumbnail
本屆 #JCConf 邀請到 許子謙 分享「用AI進行老舊java專案的現代化重構經驗談」 講題簡介: 介紹運用 AI 工具(如 GitHub Copilot)協助公司內部老舊 Java 專案的現代化重構。這些專案原本採用 Java 8,未使用任何框架,功能皆由開發人員實作,模組間以函式互相
Thumbnail
本屆 #JCConf 邀請到 許子謙 分享「用AI進行老舊java專案的現代化重構經驗談」 講題簡介: 介紹運用 AI 工具(如 GitHub Copilot)協助公司內部老舊 Java 專案的現代化重構。這些專案原本採用 Java 8,未使用任何框架,功能皆由開發人員實作,模組間以函式互相
Thumbnail
那是一場典型的週一晨會,直到老闆開口。 他剛從一場科技峰會回來,臉上還帶著未消散的興奮。他用一種不容置疑的語氣,環視會議室,最後目光落在我身上:「AI的浪潮,我們不能再等了。你,去研究一下,兩週內,我要看到導入方案。」 那一刻,我感覺整個會議室的壓力,都匯集到了我的辦公桌上。 我的名字是艾倫,
Thumbnail
那是一場典型的週一晨會,直到老闆開口。 他剛從一場科技峰會回來,臉上還帶著未消散的興奮。他用一種不容置疑的語氣,環視會議室,最後目光落在我身上:「AI的浪潮,我們不能再等了。你,去研究一下,兩週內,我要看到導入方案。」 那一刻,我感覺整個會議室的壓力,都匯集到了我的辦公桌上。 我的名字是艾倫,
Thumbnail
「陸總,這是您要的甘特圖...」小王戰戰兢兢地遞上文件。 「嗯,」阿陽認真地看著進度表,「婚禮場地確認了嗎?」 「是的,按照您的要求,我們做了SWOT分析,最後選定了...」
Thumbnail
「陸總,這是您要的甘特圖...」小王戰戰兢兢地遞上文件。 「嗯,」阿陽認真地看著進度表,「婚禮場地確認了嗎?」 「是的,按照您的要求,我們做了SWOT分析,最後選定了...」
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News