当前位置: 首页 > 工具软件 > ipt-php > 使用案例 >

PHP超全局数组解析-SERVER

毛淳
2023-12-01

PHP超全局数组解析-SERVER

运行一次的效果

基于WAMP localhost

var_dump($_SERVER);
array (size=36)
  'HTTP_HOST' => string 'localhost' (length=9)
  'HTTP_USER_AGENT' => string 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0' (length=78)
  'HTTP_ACCEPT' => string 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' (length=63)
  'HTTP_ACCEPT_LANGUAGE' => string 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3' (length=35)
  'HTTP_ACCEPT_ENCODING' => string 'gzip, deflate' (length=13)
  'HTTP_COOKIE' => string '_ga=GA1.1.1841701247.1487412913; Phpstorm-2da3c490=2a678e84-4708-4b22-9f56-26d6da14c666' (length=87)
  'HTTP_CONNECTION' => string 'keep-alive' (length=10)
  'HTTP_UPGRADE_INSECURE_REQUESTS' => string '1' (length=1)
  'HTTP_CACHE_CONTROL' => string 'max-age=0' (length=9)
  'PATH' => string 'C:\ProgramData\Oracle\Java\javapath;F:\Python\Python35\Scripts\;F:\Python\Python35\;C:\Program Files\Broadcom\Broadcom 802.11 Network Adapter;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Compon'... (length=1385)
  'SystemRoot' => string 'C:\WINDOWS' (length=10)
  'COMSPEC' => string 'C:\WINDOWS\system32\cmd.exe' (length=27)
  'PATHEXT' => string '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW' (length=62)
  'WINDIR' => string 'C:\WINDOWS' (length=10)
  'SERVER_SIGNATURE' => string '<address>Apache/2.4.9 (Win64) PHP/5.5.12 Server at localhost Port 80</address>
' (length=79)
  'SERVER_SOFTWARE' => string 'Apache/2.4.9 (Win64) PHP/5.5.12' (length=31)
  'SERVER_NAME' => string 'localhost' (length=9)
  'SERVER_ADDR' => string '::1' (length=3)
  'SERVER_PORT' => string '80' (length=2)
  'REMOTE_ADDR' => string '::1' (length=3)
  'DOCUMENT_ROOT' => string 'F:/web/' (length=7)
  'REQUEST_SCHEME' => string 'http' (length=4)
  'CONTEXT_PREFIX' => string '' (length=0)
  'CONTEXT_DOCUMENT_ROOT' => string 'F:/web/' (length=7)
  'SERVER_ADMIN' => string 'admin@example.com' (length=17)
  'SCRIPT_FILENAME' => string 'F:/web/index.php' (length=16)
  'REMOTE_PORT' => string '51595' (length=5)
  'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
  'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8)
  'REQUEST_METHOD' => string 'GET' (length=3)
  'QUERY_STRING' => string '' (length=0)
  'REQUEST_URI' => string '/' (length=1)
  'SCRIPT_NAME' => string '/index.php' (length=10)
  'PHP_SELF' => string '/index.php' (length=10)
  'REQUEST_TIME_FLOAT' => float 1503973030.41
  'REQUEST_TIME' => int 1503973030

HTTP_*

HTTP开头的键,一般都是客户端的请求头中的内容,涉及到HTTP协议的一些内容,列举如下。
HTTP请求头,一般由报文首部 + 空行 + 报文主体构成,而报文首部由请求行 + 请求首部字段 + 通用首部字段 + 实体首部字段 + 其他构成

HOST

告知服务器需要请求的资源所在的主机名。需要这个字段的原因是因为互联网上有些单台主机,却分配了多个域名构成虚拟主机,这时候只能通过HOST来确认到底请求的是哪个主机。
当然如果服务器上没有主机名,使用空值即可。

USER_AGENT

Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0
一看这个字段的值就知道它指的是什么了,Windows 10,x64, Firefox什么的,已经告诉大家我测试时候的一些环境了。
这个字段创建了请求的浏览器和用户代理名称等,通过该字段,服务器端能够识别当前请求用户的一些平台信息,通过这个可以调整渲染视图,比如如果检测到Android字段,那么返回的视图就要考虑是否使用移动端的页面。

ACCEPT

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
ACCEPT字段告知服务器,当前的客户端能够处理的媒体类型及他们的优先级。
text/html是一种type/subtype的表示方法,另外通过q=来增加优先级,这个值只能在0~1(精确到小数点后三位)之间,使用;隔开。*表示通配符。
可以看出在我的电脑上优先使用text/html,application/xhtml+xml,application/xml,他们都是文本,其余的都是低优先级的。

ACCEPT_LANGUAGE

zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
类似于ACCEPT,ACCEPT_LANGUAGE表示客户端能够处理的自然语言集(中文、英文什么的),同样使用q=表示权重。
从在我的电脑上测试的结果可知,优先使用中文,其次是美式英语,然后是英语。

ACCEPT_ENCODING

告知服务器客户端支持的内容编码方式及其优先级。也可以使用q=来表示权重。
常见的选项有:
gzip,compress,deflate,identify

这个字段,如果做过具有登录功能的网站这个就很常见了。cookie是通过服务器发过来的一些能够简单记录用户身份的信息。客户端请求的时候附上cookie服务器就知道正在请求的用户是谁。相似的还有session。

CONNECTION

这个字段有两个功能,一方面可以控制不再转发给代理,另一方面管理持久连接。
只要将Connection的值设置为不再转发的首部字段名即可。这样通过代理服务器后,该字段将会被删去。
HTTP1.1 的连接默认都是持久化的。但是如果服务器想要明确断开连接,就会设置为close,设置为Keep-Alive客户端将在持久连续的连接上发送请求。

HTTP是无状态的协议,无法通过TCP保存状态,但是并不意味着传输完成,立即断开连接,通过服务器的配置,会经过一定的时间之后才会断开连接,这样做是有原因的:每新增一个TCP连接,会消耗一定的服务器资源,如果某用户仅仅是随意快速浏览网页,一直频繁断开连接,将会浪费很多宝贵的资源。使用keep_alive后,某个TCP连接上就能进行多次的响应。

CACHE_CONTROL

通过参数控制缓存的工作机制。
参数的命名是可选的,多个参数之间通过,分隔开。
这里参数太多了。就拿我的电脑测试的显示结果,主要是请求响应指令。
max-age 控制响应的最大Age值
也就是只要缓存不超过该选项设定的值,缓存就有效。如果设置为零,一般就不使用缓存,需要让缓存服务器将请求转发给服务器。

UPGRADE_INSECURE_REQUESTS

该选项含义是告诉服务器,浏览器可以识别https页面。

SERVER_*

以SERVER开头的键一般表示服务器的一些信息。

SERVER_ADDR

表示服务器的IP地址 这里::1是IPV6的表示方式,实际上相当127.0.0.1

SERVER_ADMIN

服务器管理员信息,这个信息是在Apache配置文件中修改的。

SERVER_NAME

服务器主机名称

SERVER_PORT

服务器使用的端口号,一般为80或者8080

SERVER_PROTCOL

服务器使用的HTTP协议类型,如目前常用的HTTP/1.1

SERVER_SIGNATURE

服务器签名信息,一般包含了服务器版本和虚拟主机名称等。

SERVER_SOFTWARE

服务器软件信息,将会在响应头中的SERVER中给出

REQUEST_*

request开头的键,一般表示客户端的一些请求信息

REQUEST_METHOD

表示请求方式,一般是GET或者POST,GET和POST的区别,请参考其他文档。

REQUEST_SCHEME

表示当前连接使用的协议,一般为http或者https

REQUEST_TIME

请求时间,Unix时间戳表示,精确到秒

REQUEST_TIME_FLOAT

请求时间,同上,但是精确到毫秒。

REQUEST_URI

请求URL的路径字符串,不包含localhost,例如这里只显示\

REMOTE_ADDR

客户端IP地址

REMOTE_PORT

客户端使用的端口。

QUERY_STRING

查询字符串,如请求为localhost/?a=a,,将显示a=a

PHP_SELF / SRCIPT_NAME

PHP_SELF返回程序名称,SRCIPT_NAME返回程序文件的名称。

SCRIPT_NAME绝对返回执行的php脚本名称及其相对路径。
而PHP_SELF不完全是。
例如:
localhost/index.php/1/2
PHP_SELF返回/index.php/1/2
SCRIPT_NAME返回/index.php

DOCUMENT_ROOT

当前脚本运行的环境中的根目录

其他环境变量

通过值COMSPEC就可以看,这是指向cmd位置的,类似的还有PATHPATHEXTSystemRoot, WINDIR都一些平台相关的信息,属于环境变量一类的。

 类似资料: