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.0 和
4.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 中。
|
注:
当运行于命令行模式时,此数组将不会包含
argv 和 argc 条目;它们已经存在于数组
$_SERVER 中。
- $_SESSION
当前注册给脚本会话的变量。类似于旧数组
$HTTP_SESSION_VARS 数组(依然有效,但反对使用)。详细信息,请参照
Session 处理函数章节。