<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >预定义变量</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PHP 手册" HREF="index.html"><LINK REL="UP" TITLE="变量" HREF="language.variables.html"><LINK REL="PREVIOUS" TITLE="变量" HREF="language.variables.html"><LINK REL="NEXT" TITLE="变量范围" HREF="language.variables.scope.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PHP 手册</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="language.variables.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >章 12. 变量</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="language.variables.scope.html" ACCESSKEY="N" >下一页</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="language.variables.predefined" >预定义变量</A ></H1 ><P > PHP 提供了大量的预定义变量。由于许多变量依赖于运行的服务器的版本和设置,及其它因素,所以并没有详细的说明文档。一些预定义变量在 PHP 以<A HREF="features.commandline.html" >命令行</A >形式运行时并不生效。有关这些变量的详细列表,请参阅<A HREF="reserved.variables.html" >预定义变量</A >一章。 </P ><DIV CLASS="warning" ><P ></P ><TABLE CLASS="warning" BORDER="1" WIDTH="100%" ><TR ><TD ALIGN="CENTER" ><B >警告</B ></TD ></TR ><TR ><TD ALIGN="LEFT" ><P > PHP 4.2.0 以及后续版本中,PHP 指令 <A HREF="ini.core.html#ini.register-globals" >register_globals</A > 的默认值为 <SPAN CLASS="emphasis" ><I CLASS="emphasis" >off</I ></SPAN >。这是 PHP 的一个主要变化。让 register_globals 的值为 <SPAN CLASS="emphasis" ><I CLASS="emphasis" >off</I ></SPAN > 将影响到预定义变量集在全局范围内的有效性。例如,为了得到 <CODE CLASS="varname" >DOCUMENT_ROOT</CODE > 的值,将必须使用 <CODE CLASS="varname" >$_SERVER['DOCUMENT_ROOT']</CODE > 代替 <CODE CLASS="varname" >$DOCUMENT_ROOT</CODE >,又如,使用 <CODE CLASS="varname" >$_GET['id']</CODE > 来代替 <CODE CLASS="varname" >$id</CODE > 从 URL <TT CLASS="literal" >http://www.example.com/test.php?id=3</TT > 中获取 id 值,亦或使用 <CODE CLASS="varname" >$_ENV['HOME']</CODE > 来代替 <CODE CLASS="varname" >$HOME</CODE > 获取环境变量 HOME 的值。 </P ><P > 更多相关信息,请阅读 <A HREF="ini.core.html#ini.register-globals" >register_globals</A > 的配置项条目,安全一章中的<A HREF="security.globals.html" >使用 Register Globals</A >,以及 PHP <A HREF="http://www.php.net/releases/4_1_0.php" TARGET="_top" >4.1.0</A > 和 <A HREF="http://www.php.net/releases/4_2_0.php" TARGET="_top" >4.2.0</A > 的发行通告。 </P ><P > 如果有可用的 PHP 预定义变量那最好用,如<A HREF="language.variables.predefined.html#language.variables.superglobals" >超全局变量</A >。 </P ></TD ></TR ></TABLE ></DIV ><P > 从 PHP 4.1.0 开始,PHP 提供了一套附加的预定数组,这些数组变量包含了来自 web 服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效,例如,在任何范围内自动生效。因此通常被称为自动全局变量(autoglobals)或者超全局变量(superglobals)。(PHP 中没有用户自定义超全局变量的机制。)超全局变量罗列于下文中;但是为了得到它们的内容和关于 PHP 预定义变量的进一步的讨论以及它们的本质,请参阅<A HREF="reserved.variables.html" >预定义变量</A >。而且,你也将注意到旧的预定义数组(<CODE CLASS="varname" >$HTTP_*_VARS</CODE >)仍旧存在。自 PHP 5.0.0 起,长格式的 PHP <A HREF="language.variables.predefined.html" >预定义变量</A >可以通过设置 <A HREF="ini.core.html#ini.register-long-arrays" >register_long_arrays</A > 来屏蔽。 </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >可变变量: </B > 超级全局变量不能被用作<A HREF="language.variables.variable.html" >可变变量</A >。 </P ></BLOCKQUOTE ></DIV ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >注意: </B > 尽管超全局变量和 HTTP_*_VARS 同时存在。但是他们并不是同一个变量,所以改变一个的值并不会对另一个产生影响。 </P ></BLOCKQUOTE ></DIV ><P > 如果某些 <A HREF="ini.core.html#ini.variables-order" >variables_order</A > 中的变量没有设定,它们的对应的 PHP 预定义数组也是空的。 </P ><P ></P ><DIV CLASS="variablelist" ><P ><B >PHP 超全局变量</B ></P ><DL ><DT ><A HREF="reserved.variables.html#reserved.variables.globals" >$GLOBALS</A ></DT ><DD ><P > 包含一个引用指向每个当前脚本的全局范围内有效的变量。该数组的键名为全局变量的名称。从 PHP 3 开始存在 <CODE CLASS="varname" >$GLOBALS</CODE > 数组。 </P ></DD ><DT ><A HREF="reserved.variables.html#reserved.variables.server" >$_SERVER</A ></DT ><DD ><P > 变量由 web 服务器设定或者直接与当前脚本的执行环境相关联。类似于旧数组 <CODE CLASS="varname" >$HTTP_SERVER_VARS</CODE > 数组(依然有效,但反对使用)。 </P ></DD ><DT ><A HREF="reserved.variables.html#reserved.variables.get" >$_GET</A ></DT ><DD ><P > 经由 URL 请求提交至脚本的变量。类似于旧数组 <CODE CLASS="varname" >$HTTP_GET_VARS</CODE > 数组(依然有效,但反对使用)。 </P ></DD ><DT ><A HREF="reserved.variables.html#reserved.variables.post" >$_POST</A ></DT ><DD ><P > 经由 HTTP POST 方法提交至脚本的变量。类似于旧数组 <CODE CLASS="varname" >$HTTP_POST_VARS</CODE > 数组(依然有效,但反对使用)。 </P ></DD ><DT ><A HREF="reserved.variables.html#reserved.variables.cookies" >$_COOKIE</A ></DT ><DD ><P > 经由 HTTP Cookies 方法提交至脚本的变量。类似于旧数组 <CODE CLASS="varname" >$HTTP_COOKIE_VARS</CODE > 数组(依然有效,但反对使用)。 </P ></DD ><DT ><A HREF="reserved.variables.html#reserved.variables.files" >$_FILES</A ></DT ><DD ><P > 经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 <CODE CLASS="varname" >$HTTP_POST_FILES</CODE > 数组(依然有效,但反对使用)。详细信息请参阅 <A HREF="features.file-upload.html#features.file-upload.post-method" >POST 方法上传</A >。 </P ></DD ><DT ><A HREF="reserved.variables.html#reserved.variables.environment" >$_ENV</A ></DT ><DD ><P > 执行环境提交至脚本的变量。类似于旧数组 <CODE CLASS="varname" >$HTTP_ENV_VARS</CODE > 数组(依然有效,但反对使用)。 </P ></DD ><DT ><A HREF="reserved.variables.html#reserved.variables.request" >$_REQUEST</A ></DT ><DD ><P > 经由 GET,POST 和 COOKIE 机制提交至脚本的变量,因此该数组并不值得信任。所有包含在该数组中的变量的存在与否以及变量的顺序均按照 <TT CLASS="filename" >php.ini</TT > 中的 <A HREF="ini.core.html#ini.variables-order" >variables_order</A > 配置指示来定义。此数组在 PHP 4.1.0 之前没有直接对应的版本。参见 <A HREF="function.import-request-variables.html" ><B CLASS="function" >import_request_variables()</B ></A >。 </P ><DIV CLASS="caution" ><P ></P ><TABLE CLASS="caution" BORDER="1" WIDTH="100%" ><TR ><TD ALIGN="CENTER" ><B >小心</B ></TD ></TR ><TR ><TD ALIGN="LEFT" ><P > 自 PHP 4.3.0 起,<CODE CLASS="varname" >$_FILES</CODE > 中的文件信息不再存在于 <CODE CLASS="varname" >$_REQUEST</CODE > 中。 </P ></TD ></TR ></TABLE ></DIV ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >注意: </B > 当运行于<A HREF="features.commandline.html" >命令行</A >模式时,此数组将<SPAN CLASS="emphasis" ><I CLASS="emphasis" >不会</I ></SPAN >包含 <CODE CLASS="varname" >argv</CODE > 和 <CODE CLASS="varname" >argc</CODE > 条目;它们已经存在于数组 <CODE CLASS="varname" >$_SERVER</CODE > 中。 </P ></BLOCKQUOTE ></DIV ></DD ><DT ><A HREF="reserved.variables.html#reserved.variables.session" >$_SESSION</A ></DT ><DD ><P > 当前注册给脚本会话的变量。类似于旧数组 <CODE CLASS="varname" >$HTTP_SESSION_VARS</CODE > 数组(依然有效,但反对使用)。详细信息,请参照 <A HREF="ref.session.html" >Session 处理函数</A >章节。 </P ></DD ></DL ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="language.variables.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >起始页</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="language.variables.scope.html" ACCESSKEY="N" >下一页</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >变量</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="language.variables.html" ACCESSKEY="U" >上一级</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >变量范围</TD ></TR ></TABLE ></DIV ></BODY ></HTML >