PHP 手冊
上一頁 | 章 7.各類變數 | 下一頁

# 預設的變數

PHP 為它執行的程式提供了大量的預設變數。然而，由于有許多變數因依賴其所執行的伺服器種類、版本、安裝等情況而定，因此難以有完整的被記載下來。更有一些變數在指令行的模式運行時是不能使用的。有關這些變數的列表，請參考保留的先前定義變數一節。

切記!
PHP 4.2.0 以後的版本，register_globals 指令的預設值是 off。這是一個重大的改變。將 register_globals 的值預設為 off 會影響到預設變數在全域範圍內的有效性。例如，要得到 DOCUMENT_ROOT 的值，應使用 $_SERVER['DOCUMENT_ROOT'] 而不是 $DOCUMENT_ROOT、使用 $_GET['id'] 以取得 URL http://www.example.com/test.php?id=3 中 id 的值，而不是用 $id、或使用 $_ENV['HOME'] 來取代 $HOME。 更多與此更改相關的資料可在 register_globals 的設置一節、使用 Register Globals 中的安全章，或在 4.1.0 及 4.2.0 的發行通告中取得。 我們建議您使用 PHP 提供的保留預設變數，如 superglobal 陳列。

自 4.1.0 版本起，PHP 額外提供了一套預設陣列，當中包含了來自伺服器〈如適用〉、環境、及使用者輸入的變數。這些新陳列比較特別，因此它們會自動地設為全域，即可以在所有範圍內使用。正因如此，它們也被稱為 'autoglobals' 或 'superglobals'。〈PHP 尚未有使用者自行定義 superglobals 的功能。〉我們將在下面列出 superglobals，但要知道它們的內容和 PHP 預設變數的深入討論，請參考保留的先前定義變數一節。此外，您也會留意舊有的預設變數 ($HTTP_*_VARS) 仍然存在。 由 PHP 5.0.0 開始，較長的 PHP 先前定義的變數陳列可以通過設定 register_long_arrays 來關閉。

> 可變變數: Superglobals 不能當作可變變數來使用。

如果某些 variables_order 中的變數沒有被設定，它們相對的 PHP 預設陳列也將會是空的。

PHP 的 Superglobals

$GLOBALS

  包含一個指向程式全域範圍內可用變數的索引。此陳列的索引鍵為全域變數的名稱。$GLOBALS 自 PHP 3 開始就已存在。

$_SERVER

  由網頁伺服器設定的變數或目前的程式所執行的環境產生的變數。其性質類似舊有的 $HTTP_SERVER_VARS 陳列，雖然目前還可以使用，但不被建議。

$_GET

  通過 HTTP GET 提供給程式的變數。其性質類似舊有的 $HTTP_GET_VARS 陳列，雖然目前還可以使用，但不被建議。

$_POST

  通過 HTTP POST 提供給程式的變數。其性質類似舊有的 $HTTP_POST_VARS陳列，雖然目前還可以使用，但不被建議。

$_COOKIE

  通過 HTTP cookies 提供給程式的變數。其性質類似舊有的 $HTTP_COOKIE_VARS陳列，雖然目前還可以使用，但不被建議。

$_FILES

  通過 HTTP POST 檔案上傳提供給程式的變數。其性質類似舊有的 $HTTP_POST_FILES陳列，雖然目前還可以使用，但不被建議。詳情請參閱 POST 上傳方式。

$_ENV

  執行環境提供給程式的變數。其性質類似舊有的 $HTTP_ENV_VARS陳列，雖然目前還可以使用，但不被建議。

$_REQUEST

  通過 GET，POST 和 COOKIE 輸入方式提供給程式的變數、也正因如此，不值得信任。此陳列中變數的存在與否及次序是決定於 variables_order 的設定。PHP 4.1.0 之前的版本並沒有類似此陳列的變數。請同時參閱 import_request_variables()。

  小心!
  由 PHP 4.3.0 版開始，$_REQUEST 陳列已不再含有 FILE 的資訊。

  > 備注: 在指令行模式下執行時，它並不包含 argv 和 argc 項目。此兩項目只在 $_SERVER 陳列中出現。

$_SESSION

  目前和程式注冊了的 session 變數。其性質類似舊有的 $HTTP_SESSION_VARS陳列，雖然目前還可以使用，但不被建議。詳情請參閱 Session 處理函數一節。

上一頁 | 最開頭 | 下一頁
各類變數 | 上一層 | 變數範圍