PHP5後不要用$HTTP_GET_VARS喔!
這篇是帶著蠻多懺悔的心態在寫的。
PHP程式當中有很多可以取得網頁資料的方法,舉例來說:
- $_GET、$HTTP_GET_VARS:這個陣列儲存著從網址「?」之後的變數名稱與資料
- $_POST、$HTTP_POST_VARS:這個陣列儲存著表單用POST過來的資料
- $_SESSION、$HTTP_SESSION_VARS:這個陣列儲存著session變數
- $_COOKIE、$HTTP_COOKIE_VARS:這個陣列儲存著session變數
- $_FILES:這個陣列儲存著從表單上傳的檔案
- $_SERVER、$HTTP_SERVER_VARS:這個陣列儲存著伺服器與用戶端瀏覽器相關的環境變數
其他還有$_REQUEST等等,不太熟就不列了。
在PHP3和PHP4.1.0之前的版本,php.ini設定的register_globals = on,但在PHP5卻預設改成register_globals = off,這會導致$HTTP_GET_VARS等$HTTP_開頭的變數不能等同$_GET來使用,PHP4手冊也建議使用$_GET。我以前真的是錯很大。(狂汗)
要修正這個問題,最簡單的是把php.ini改成register_globals = on,但是很多時候寫程式的沒辦法碰到伺服器主機,所以可以用偷懶方法。例如在每個程式都會執行到的地方設:
$HTTP_GET_VARS = $_GET;
或是認真一點,用Dreamweaver或者UltraEdit可以在多數檔案中搜尋與取代的功能,把$HTTP_GET_VARS換成$_GET。
多多加油吧,反正我覺得我還是很嫩就是。
複習一下register_globals = on的功能:
例如有個$_GET["id"] = "123"的變數可以用,那麼$HTTP_GET_VARS、$id都會有一樣的值。但這會造成變數混亂、不易控制,所以後來版本就關掉了。