如何升級CodeIgniter 2.0

php framework - CodeIgniter 2.0 已經出了一陣子了。後續幾個月內,很快的變更到2.0.2。因為他新增一些功能,非常符合開發上的管理。另外,對於安全性也有更多的著墨。於是,最近開始做升級的動作。將由原本所使用的1.7.3升級到2.0.2。

如何升級到CodeIgniter 2呢?官方網站有些資訊可以參考,內容主要分為兩類。一是版本功能變化?另一個則是如何升級!建議下面的網址內容一定要先看過,心有餘力… 建議還是花個幾小時看一下完整的說明文件,就可以充分瞭解CodeIginter 2.x 的好處~ 說真的,CodeIgniter的文件,真的是少見的簡潔又清楚~ (K 過不少文件,很少像CodeIgniter可以在一天內看完的)

版本變更記錄
升級注意事項(下面僅列出 1.7x 到 2.x,其實還有每一小版本的升級說明)
如果,沒改過CodeIginter的核心程式,升級步驟就如同上面所述,如此的簡單…

不過… index.php和 /application/config/config.php 這兩個檔案的內容變化非常大。建議採用以CodeIgniter 2.x版本為依據,再將原本使用中的設定移過來的方式來處理。

文件中雖然沒有提到 config 這目錄必須更換。我還是建議把該目錄中下面檔案換成CodeIgniter 2.x的版本。如果,原本有改過下面檔案的內容,記得也要更新(應該說merge吧)
  • config/auto_load.php(含有packages設定,建議更換)
  • config/route.php
  • config/mimes.php
  • config/user_agents.php


最後,則是一些個人在升級上遇到的小狀況,特別記錄下來~
注意事項
  • $this->uri->uri_string()有BUG
    官方文件中提到,當網址為http://example.com/index.php/news/local/345時,應該傳回 /news/local/345 。不過,卻是傳回 news/local/345 (開頭少個/)
  • 如果有使用$this->input->xss_clean(),記得改成 $this->security->xss_clean()
  • CodeIgniter 2.x已經內建提供CLI模式
    如果您在1.x時有使用第三方的CLI套件,建議換成CodeIgniter 2.x內建的吧。以我的狀況,只是把第三方提供的MY_URL.php拿掉即可。

最後,還是遇到一個狀況。(開發環境中卻無法模擬出來這狀況)…訊息如下…
Severity: Notice --> iconv(): Detected an incomplete multibyte character in input string /CodeIgniter/system/core/Utf8.php 89
Utf8這個功能在官方文件上並沒有提及。程式中雖然有註明參考的文件網址。事實上官方網站上卻沒這篇文件 XD 。

這訊息雖然只是偶爾出現,還是追了一下原因。看了相關程式邏輯,發現CodeIgniter 2.x 會依據設定,將GET、POST、COOKIE做utf-8的處理。最後,經由下面的程式碼處理(也就是出現 notice的地方)
  1. $str = @iconv('UTF-8''UTF-8//IGNORE'$str);  
因此,猜測原因應該是有些人的COOKIE內有比較特殊的字元,導致出現上面的訊息。
PS:我嘗試將PHP和相關套件升級到最新版,此問題依舊會出現

後記:在改CodeIgniter程式時,發現很多地方,開發人員刻意的將『"』改成『'』

留言