PHP開發團隊宣布將結束長達7年的PHP 4.0版開發活動,2007年底停止升級,僅剩重大安全問題時的修補,2008年8月8日之後不再提供任何PHP 4官方支援。臺灣每4個網站,就有1個網站採用PHP 4,若未升級,將有潛在的安全隱憂。

PHP開發團隊表示從3年前發布PHP 5至今,僅2成網站升級,多數虛擬主機服務供應商,仍停留在PHP 4的產品,普及速度緩慢。為加快網站升級速度,同時將開發資源移轉至PHP 6,而做出終止PHP 4開發的決定。

PHP是目前世界上使用率最高的網頁開發語言,在開發語言排行榜(TIOBE)排名第5,僅次於Java、C、C++和Visual Basic。法國PHP/MySQL入口網站Nexen.net調查全世界近1,090萬臺網頁伺服器(2007年6月),使用PHP的網站比例高達33.88 %,遠超過第2高的ASP(20.94%)網站。在全部使用PHP的網站中,還有8成網頁採用PHP 4。未來這8成近300萬個網站,需在1年內升級至PHP 5,否則一旦出現新的安全漏洞,就會面臨無人支援,需自行解決的窘境。

臺灣每4個網站就有1個用PHP 4
根據Nexen.net調查結果顯示,臺灣使用PHP的網站比例還高於全球平均值,達 41.75 %,這其中超過6成採用PHP 4開發網頁,表示使用者每打開4個網站,就有1個是用PHP 4。「酷!學園」PHP版版主姜鐘凱認為:「對這些採用PHP 4網站的影響較大。」換句話說,臺灣每4個網站,就有1個網站,未來將面臨潛在的安全隱憂,若是企業核心服務使用PHP 4,承擔的風險成本就更高。

目前臺灣多數虛擬主機供應商,主要還是以PHP 4環境的產品為主,甚少提供PHP 5的產品。虛擬主機供應商戰國策的PHP網站客戶數超過5000家,戰國策技術支援課主任胡邦元表示:「我們的客戶99.9%都是PHP 4,PHP 5需求很少,不到0.1%,目前是採用獨立PHP 5伺服器來供應。」明年8月PHP 4支援結束時,可預見PHP 5的需求比例勢必大幅提昇,虛擬主機的供應商首當其衝,將面臨客戶的升級挑戰。第5版在基本架構上作了很大幅度的調整,即使在PHP 5的環境中,開啟向下相容模式,讓原本PHP 4的程式碼可執行,但仍舊會有不穩或效能不佳的情形,須修改程式才能改善。

物件導向語法不相容是升級主要門檻
PHP 5為因應現代程式語言發展趨勢或滿足新興開發框架的需求,增加許多新功能,例如改善對XML的控制方式和執行效能,更利於開發網路服務。或增強開發語言的安全性,提供PDO這類新的資料庫連結方式,來預防常見SQL注入的駭客入侵技術,此外也將預設資料庫從MySQL,改為SQLlite等。

最大的改變則是PHP 5對物件導向的支援更完整。雖然從PHP 3已經開始具備物件導向的語法,但到PHP 5幾乎整個重寫。原本PHP 4的物件導向語法,也無法相容於5.0版,例如對物件類別的建構子(Constructor)方法,4.0版中採與類別同名,但在5.0版中需使用建構子語法來建立,舊版語法無法在新版中執行。姜鐘凱表示:「物件導向的部分是升級過程中最主要的修改重點,如果沒有到使用物件導向,幾乎可直接更新到PHP 5。」

臺灣首位通過PHP認證的梁楓評估從PHP 4全面升級到5.0版的速度仍舊會持續很長的時間:「對開發人員而言,樂見轉向PHP 5,但許多企業應用為相容既有系統,仍採用PHP 4,除非必要,企業不會輕易升級。」他指出升級難度會因程式碼複雜程度而不同,梁楓建議:「企業應提早評估,了解需修改的幅度,避免因安全問題需臨時升級,來不及應變的狀況。」

開發人員是最早面臨升級壓力的人,LifeType開發團隊的吳信儀評估對他們影響不大。目前,新建網站大多直接使用PHP 5進行開發,不受4.0停止支援的影響,也無需處理向下相容的問題。許多PHP套件的資源網站,例如PEAR.php.net,也逐漸以PHP 5為主。不過吳信儀認為PHP 4與5沒有孰優孰劣的問題,他表示:「PHP 4仍舊是很好用的開發語言,對一些常見用途也很足夠。開發人員要衡量開發作業程序是否能適應物件導向的開發模式,再作選擇,這是完全不同的開發模式。」他指出:「是否必須改用新版,關鍵是虛擬主機供應商能否繼續提供舊版本的產品。」

面對PHP 4將停止支援,臺灣虛擬主機供應商的態度卻是堅持到最後,讓採用虛擬主機服務的企業,能有較長的緩衝時間。Seednet第二事業群行銷處企畫部經理劉小菁表示:「只要有一個客戶還在使用PHP 4,我們就會繼續提供支援。」她表示Seednet已經準備好PHP 5的產品環境,未來會提供給PHP 4的客戶,進行升級評估的測試。戰國策技術支援課主任胡邦元同樣也表示會繼續支援4.0版,但他建議企業提早評估,戰國策也規畫對考慮升級但技術能力不足的客戶,提供升級支援的服務。文⊙王宏仁



PHP4升級5大要點

注意事項 解決方式
自行編譯PHP時,MySQL不再是預設會編譯的PHP模組。 請在編譯的時候加入 --with-mysql ,若是自己有安裝 mysql 別忘了加入 —with-mysql=[mysql_dir]
PHP 5的物件使用新關鍵字宣告物件內的變數。 原本使用var $abc;的宣告方式,請改用 public,private,protected進行宣告。(php5有完整的私有物件變數保護機制)
PHP 5物件從原來的預設傳值,變成預設傳參考。 在PHP 4中,$a = $b;會是兩個不同的實體。在PHP 5中有可能會是相同的實體。需要用$a = clone $b;才會進行複製物件的動作。
PHP 5新增很多Magic method,善用可減少撰寫大量程式碼。 常用Magic method有__get、__set、__call等,另外有__autoload這個全域的好用函式。
大部分PHP 4程式碼可以在PHP 5 上執行,但是部份會產生不少Notice。 一般來說Notice 是可忽略,只要修改 php.ini 取消顯示即可,但是若修正Notice所提示的程式碼,可增進程式的穩定性與安全性。
資料來源:姜鐘凱

熱門新聞

Advertisement