老專案大翻修:我從 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
留言分享你的想法!
avatar-img
麟製所
2會員
39內容數
軟體、旅遊分享
麟製所的其他內容
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
生產力爆發帶來的過剩,會讓過去的「還可以啦」成為最低標準。市場需求對於出類拔萃、獨一無二的需求還是存在,但是對於那些價格高度敏感,或是只需要穩定、便宜、還可以啦的需求端來說,AI 正在迅速取代這部分的供給,中間長尾的服務提供者被 AI 替換。
Thumbnail
生產力爆發帶來的過剩,會讓過去的「還可以啦」成為最低標準。市場需求對於出類拔萃、獨一無二的需求還是存在,但是對於那些價格高度敏感,或是只需要穩定、便宜、還可以啦的需求端來說,AI 正在迅速取代這部分的供給,中間長尾的服務提供者被 AI 替換。
Thumbnail
今年在 Google I/O 有幸看到 Hassabis 本人幾秒,DeepMind 和共同創辦人 Demis Hassabis 的這個題目,也一直都在待寫清單中。 前陣子,在介紹 Founders Fund 時,發現 Demis Hassabis 當初在說服 Peter Thiel 投資 Dee
Thumbnail
今年在 Google I/O 有幸看到 Hassabis 本人幾秒,DeepMind 和共同創辦人 Demis Hassabis 的這個題目,也一直都在待寫清單中。 前陣子,在介紹 Founders Fund 時,發現 Demis Hassabis 當初在說服 Peter Thiel 投資 Dee
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