$_SERVER -- $HTTP_SERVER_VARS [已删除] — 服务器和执行环境信息
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。这也就意味着大量的此类变量都会在» CGI 1.1 规范中说明,所以应该仔细研究一下。
Note: PHP 5.4.0 之前,$HTTP_SERVER_VARS 包含着相同的信息,但它不是一个超全局变量。 (注意 $HTTP_SERVER_VARS 与 $_SERVER 是不同的变量,PHP处理它们的方式不同)
在 $_SERVER 中,你也许能够,也许不能够找到下面的这些元素。注意,如果以命令行方式运行 PHP,下面列出的元素几乎没有有效的(或是没有任何实际意义的)。
CGI/1.1
”。
Note: 在 Apache 2 里,必须设置
UseCanonicalName = On
和ServerName
。 否则该值会由客户端提供,就有可能被伪造。 上下文有安全性要求的环境里,不应该依赖此值。
GET
”, “HEAD
”,“POST
”,“PUT
”。
Note:
如果请求方法为
HEAD
,PHP 脚本将在发送 Header 头信息之后终止(这意味着在产生任何输出后,不再有输出缓冲)。
Accept:
项的内容,如果存在的话。
Accept-Charset:
项的内容,如果存在的话。例如:“iso-8859-1,*,utf-8
”。
Accept-Encoding:
项的内容,如果存在的话。例如:“gzip
”。
Accept-Language:
项的内容,如果存在的话。例如:“en
”。
Connection:
项的内容,如果存在的话。例如:“Keep-Alive
”。
Host:
项的内容,如果存在的话。
User-Agent:
项的内容,如果存在的话。该字符串表明了访问该页面的用户代理的信息。一个典型的例子是:Mozilla/4.5 [en] (X11; U;
Linux 2.2.9 i586)。除此之外,你可以通过 get_browser() 来使用该值,从而定制页面输出以便适应用户代理的性能。
Note: 注意当使用 IIS 上的 ISAPI 方式时,如果不是通过 HTTPS 协议被访问,这个值将为
off
。
Note: 你的服务器必须被配置以便产生这个变量。例如在 Apache 中,你需要在 httpd.conf 中设置
HostnameLookups On
来产生它。参见 gethostbyaddr()。
当前执行脚本的绝对路径。
Note:
如果在命令行界面(Command Line Interface, CLI)使用相对路径执行脚本,例如 file.php 或 ../file.php,那么 $_SERVER['SCRIPT_FILENAME'] 将包含用户指定的相对路径。
80
”。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
Note: 在 Apache 2 里,为了获取真实物理端口,必须设置
UseCanonicalName = On
以及UseCanonicalPhysicalPort = On
。 否则此值可能被伪造,不一定会返回真实端口值。 上下文有安全性要求的环境里,不应该依赖此值。
Note: 自 PHP 4.3.2 起,PATH_TRANSLATED 在 Apache 2 SAPI 模式下不再和 Apache 1 一样隐含赋值,而是若 Apache 不生成此值,PHP 便自己生成并将其值放入 SCRIPT_FILENAME 服务器常量中。这个修改遵守了 CGI 规范,PATH_TRANSLATED 仅在 PATH_INFO 被定义的条件下才存在。 Apache 2 用户可以在 httpd.conf 中设置
AcceptPathInfo = On
来定义 PATH_INFO。
/index.html
”。
/some/stuff
。
版本 | 说明 |
---|---|
5.4.0 | 因为移除了 long array register 功能,$HTTP_SERVER_VARS 不再有效。 |
5.3.0 | 废弃了使 $HTTP_SERVER_VARS 生效的 register_long_arrays 指令。 |
Example #1 $_SERVER 范例
<?php
echo $_SERVER['SERVER_NAME'];
?>
以上例程的输出类似于:
www.example.com
Note:
“Superglobal”也称为自动化的全局变量。这就表示其在脚本的所有作用域中都是可用的。不需要在函数或方法中用 global $variable; 来访问它。