:::

PHP5後不要用$HTTP_GET_VARS喔!

8月 27, 2007 0 Comments Edit Copy Download

這篇是帶著蠻多懺悔的心態在寫的。

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都會有一樣的值。但這會造成變數混亂、不易控制,所以後來版本就關掉了。