本篇文章更新時間:2020/04/17
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~


最近在處理客戶 2010 年非常舊的純客製化網站專案,準備轉換成 WordPress 架構。環境為 CentOS 5.5PHP 5.1.6Apache/2.2.3MySQL 5.0.77

原以為資料儲存會用 UTF8 ,結果居然是 latin1 ,這篇還提不到這邊的處理。

面對年代已經久遠的系統,要建立測試環境,第一個會碰到的問題就是:「到底要重建舊的環境,還是先把舊專案放到新環境試試?」

想到要把電腦環境重建,頭就很暈,舊環境又還不一定找得到資源處理,索性先把舊專案放到新環境裡試試。

結果一放就噴一堆錯誤XD

仔細查看錯誤訊息,原來只是 PHP5 時代的舊方法在 PHP7 裡拔掉不能使用了。那這種情況要放棄嗎?其實不用,現在 Google 威能,稍微用關鍵字wrapperalternative 搜尋,還真可以找到包裝過的相關方法。

解釋:過去專案使用名為 abc 的方法來寫,如今 abc 被棄用了怎辦?只要再把它給寫回來,維持一樣的輸入與輸出功能就好囉! 一堆人也為此所苦,試著用找尋替代方法的關鍵字就能出現相關討論。

下面舉例幾個這舊專案中用到的替代方法函式庫:

ereg

json_encode

json_encode 這方法本來就不存在舊專案中,但開發擴充 API 功能取資料時會用到,也是可以找到替代方法來運作。

上面這種處理「向上相容」的作法在網站開發領域前端裡有一個關鍵字:「Polyfill」,瀏覽器版本支援(IE)問題一直都是開發人員頭痛的主要原因,例如:某 C 瀏覽器版本有這方便的功能,但某 I 沒有的時候,就會透過別種實作但同名的方法來達成。更多介紹可以看這篇:什麼是 Polyfills?

前端有,那 PHP 後端有沒有 Polyfills 的集合專案? 找了一下還真有 symfony/polyfill

後記

PHP 一路寫著來沒什麼感覺,但最近倒著回去寫反而才知道現在 7.x 有多完整、多好用!XD

就算同方法舊版本有,也不代表能運作的正常與穩定,上述專案剛好有 base64_decode 的需求,但在 PHP 5.1 使用還會碰到解碼不完整的錯誤。當然就更不用說執行效能的問題了!

持續演進的系統,兼容最新環境與相容舊架構都是友善使用者/開發者的設計。就算是最新版 WordPress 裡也還有很多「老東西」且能對舊環境有一定的支援。

有空翻看別人開的 ticket 可以學習不少,像是這個討論 JSON 方法於 PHP 最低支援度的改版:Remove redundant JSON polyfills for PHP native functionality

WordPress 5.3 是 2019 年的事,這個時間點才來討論 2006 年釋出的 PHP 5.2 替代功能廢棄問題,就可以知道版本控制是一件要很嚴謹的操作。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

參與討論

5 則留言

  1. 我以為通常就是把資料弄出來到新的 WordPress 中耶! 應該是我的能力限制了我的想法,只會這一招 ><

    當年 PHP 5.2 升到 5.3 我正在玩 osCommerce,也是一陣痛苦。

  2. 很多時候把原本系統架起來才可以看到運行的細節呀~ 不過通常如果原本系統沒死也不一定要自己架過就是!你能轉換資料已經很標準、厲害了!!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *