預定義變量

PHP 提供了大量的預定義變量。由於許多變量依賴於運行的伺服器的版本和設定,及其它因素,所以並沒有詳細的說明文件。一些預定義變量在 PHP 以指令行形式運行時並不生效。有關這些變量的詳細清單,請參閱預定義變量一章。

警示

PHP 4.2.0 以及後續版本中,PHP 指令 register_globals 的預設值為 off。這是 PHP 的一個主要變化。讓 register_globals 的值為 off 將影響到預定義變量集在全局範圍內的有效性。例如,為了得到 DOCUMENT_ROOT 的值,將必須使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 來代替 $id 從 URL http://www.example.com/test.php?id=3 中取得 id 值,亦或使用 $_ENV['HOME'] 來代替 $HOME 取得環境變量 HOME 的值。

更多關聯訊息,請閱讀 register_globals 的配置項條目,安全一章中的使用 Register Globals,以及 PHP 4.1.04.2.0 的發行通告。

若果有可用的 PHP 預定義變量那最好用,如超全局變量

從 PHP 4.1.0 開始,PHP 提供了一套附加的預定陣列,這些陣列變量包括了來自 web 伺服器(若果可用),運行環境,和會員輸入的資料。這些陣列非常特別,它們在全局範圍內自動生效,例如,在任何範圍內自動生效。因此通常被稱為自動全局變量(autoglobals)或是超全局變量(superglobals)。(PHP 中沒有會員自訂超全局變量的機制。)超全局變量羅列於下文中;但是為了得到它們的內容和關於 PHP 預定義變量的進一步的討論以及它們的本質,請參閱預定義變量。而且,你也將注意到舊的預定義陣列($HTTP_*_VARS)仍舊存在。自 PHP 5.0.0 起,長格式的 PHP 預定義變量可以通過設定 register_long_arrays 來屏蔽。

可變變量: 超級全局變量不能被用作可變變量

注: 儘管超全局變量和 HTTP_*_VARS 同時存在。但是他們並不是同一個變量,所以改變一個的值並不會對另一個產生影響。

若果某些 variables_order 中的變量沒有設定,它們的對應的 PHP 預定義陣列也是空的。

PHP 超全局變量

$GLOBALS

包括一個引用指向每個現用的腳本的全局範圍內有效的變量。該陣列的鍵名為全局變量的名稱。從 PHP 3 開始存在 $GLOBALS 陣列。

$_SERVER

變量由 web 伺服器設定或是直接與現用的腳本的執行環境關聯聯。類似於舊陣列 $HTTP_SERVER_VARS 陣列(依然有效,但反對使用)。

$_GET

經由 URL 請求送出至腳本的變量。類似於舊陣列 $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 機制送出至腳本的變量,因此該陣列並不值得信任。所有包括在該陣列中的變量的存在與否以及變量的順序均按照 php.ini 中的 variables_order 配置指示來定義。此陣列在 PHP 4.1.0 之前沒有直接對應的版本。參見 import_request_variables()

注意

自 PHP 4.3.0 起,$_FILES 中的檔案訊息不再存在於 $_REQUEST 中。

注: 當運行於指令行模式時,此陣列將不會包括 argvargc 條目;它們已經存在於陣列 $_SERVER 中。

$_SESSION

現用的註冊給腳本會話的變量。類似於舊陣列 $HTTP_SESSION_VARS 陣列(依然有效,但反對使用)。詳細訊息,請參照 Session 處理函數章節。