ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
$\_SERVER $\_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息 ~~~ Array ( [MIBDIRS] => D:/xampp/php/extras/mibs [MYSQL_HOME] => \xampp\mysql\bin [OPENSSL_CONF] => D:/xampp/apache/bin/openssl.cnf [PHP_PEAR_SYSCONF_DIR] => \xampp\php [PHPRC] => \xampp\php [TMP] => \xampp\tmp [HTTP_HOST] => localhost [HTTP_CONNECTION] => keep-alive [HTTP_CACHE_CONTROL] => max-age=0 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 [HTTP_REFERER] => http://localhost/moodle317/aaa/ [HTTP_ACCEPT_ENCODING] => gzip, deflate, br [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.9 [HTTP_COOKIE] => MoodleSession=6ud7nejmg99t8lsotajvaalbf4 [PATH] => C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\xampp\php;C:\ProgramData\ComposerSetup\bin;D:\xampp\php;d:\Program Files\Git\cmd;d:\xampp\mysql\bin;C:\Users\Administrator\AppData\Roaming\Composer\vendor\bin;C:\ProgramData\ComposerSetup\bin;C:\Users\Administrator\AppData\Local\GitHubDesktop\bin [SystemRoot] => C:\Windows [COMSPEC] => C:\Windows\system32\cmd.exe [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC [WINDIR] => C:\Windows [SERVER_SIGNATURE] => Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8 Server at localhost Port 80 [SERVER_SOFTWARE] => Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8 [SERVER_NAME] => localhost [SERVER_ADDR] => ::1 [SERVER_PORT] => 80 [REMOTE_ADDR] => ::1 [DOCUMENT_ROOT] => D:/xampp/htdocs [REQUEST_SCHEME] => http [CONTEXT_PREFIX] => [CONTEXT_DOCUMENT_ROOT] => D:/xampp/htdocs [SERVER_ADMIN] => localhost [SCRIPT_FILENAME] => D:/xampp/htdocs/moodle317/aaa/aaa.php [REMOTE_PORT] => 62947 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /moodle317/aaa/aaa.php [SCRIPT_NAME] => /moodle317/aaa/aaa.php [PHP_SELF] => /moodle317/aaa/aaa.php [REQUEST_TIME_FLOAT] => 1511243359.662 [REQUEST_TIME] => 1511243359 ) ~~~ 下表列出了您能够在 $_SERVER 中访问的最重要的元素: ``` echo "PHP_SELF : " . $_SERVER['PHP_SELF'] . "<br />"; echo "GATEWAY_INTERFACE : " . $_SERVER['GATEWAY_INTERFACE'] . "<br />"; echo "SERVER_ADDR : " . $_SERVER['SERVER_ADDR'] . "<br />"; echo "SERVER_NAME : " . $_SERVER['SERVER_NAME'] . "<br />"; echo "SERVER_SOFTWARE : " . $_SERVER['SERVER_SOFTWARE'] . "<br />"; echo "SERVER_PROTOCOL : " . $_SERVER['SERVER_PROTOCOL'] . "<br />"; echo "REQUEST_METHOD : " . $_SERVER['REQUEST_METHOD'] . "<br />"; echo "REQUEST_TIME : " . $_SERVER['REQUEST_TIME'] . "<br />"; echo "REQUEST_TIME_FLOAT : " . $_SERVER['REQUEST_TIME_FLOAT'] . "<br />"; echo "QUERY_STRING : " . $_SERVER['QUERY_STRING'] . "<br />"; echo "DOCUMENT_ROOT : " . $_SERVER['DOCUMENT_ROOT'] . "<br />"; echo "HTTP_ACCEPT : " . $_SERVER['HTTP_ACCEPT'] . "<br />"; echo "HTTP_ACCEPT_CHARSET : " . $_SERVER['HTTP_ACCEPT_CHARSET'] . "<br />"; echo "HTTP_ACCEPT_ENCODING : " . $_SERVER['HTTP_ACCEPT_ENCODING'] . "<br />"; echo "HTTP_ACCEPT_LANGUAGE : " . $_SERVER['HTTP_ACCEPT_LANGUAGE'] . "<br />"; echo "HTTP_CONNECTION : " . $_SERVER['HTTP_CONNECTION'] . "<br />"; echo "HTTP_HOST : " . $_SERVER['HTTP_HOST'] . "<br />"; echo "HTTP_REFERER : " . $_SERVER['HTTP_REFERER'] . "<br />"; echo "HTTP_USER_AGENT : " . $_SERVER['HTTP_USER_AGENT'] . "<br />"; echo "HTTPS : " . $_SERVER['HTTPS'] . "<br />"; echo "REMOTE_ADDR : " . $_SERVER['REMOTE_ADDR'] . "<br />"; echo "REMOTE_HOST : " . $_SERVER['REMOTE_HOST'] . "<br />"; echo "REMOTE_PORT : " . $_SERVER['REMOTE_PORT'] . "<br />"; echo "REMOTE_USER : " . $_SERVER['REMOTE_USER'] . "<br />"; echo "REDIRECT_REMOTE_USER : " . $_SERVER['REDIRECT_REMOTE_USER'] . "<br />"; echo "SCRIPT_FILENAME : " . $_SERVER['SCRIPT_FILENAME'] . "<br />"; echo "SERVER_ADMIN : " . $_SERVER['SERVER_ADMIN'] . "<br />"; echo "SERVER_PORT : " . $_SERVER['SERVER_PORT'] . "<br />"; echo "SERVER_SIGNATURE : " . $_SERVER['SERVER_SIGNATURE'] . "<br />"; echo "PATH_TRANSLATED : " . $_SERVER['PATH_TRANSLATED'] . "<br />"; echo "SCRIPT_NAME : " . $_SERVER['SCRIPT_NAME'] . "<br />"; echo "REQUEST_URI : " . $_SERVER['REQUEST_URI'] . "<br />"; echo "PHP_AUTH_DIGEST : " . $_SERVER['PHP_AUTH_DIGEST'] . "<br />"; echo "PHP_AUTH_USER : " . $_SERVER['PHP_AUTH_USER'] . "<br />"; echo "PHP_AUTH_PW : " . $_SERVER['PHP_AUTH_PW'] . "<br />"; echo "AUTH_TYPE : " . $_SERVER['AUTH_TYPE'] . "<br />"; echo "PATH_INFO : " . $_SERVER['PATH_INFO'] . "<br />"; echo "ORIG_PATH_INFO : " . $_SERVER['ORIG_PATH_INFO'] . "<br />"; ``` $\_SERVER\['PHP\_SELF'\]、$\_SERVER\['SCRIPT\_NAME'\] 与 $\_SERVER\['REQUEST\_URI'\] 之间的区 ` http://www.5idev.com/php/index.php/test/foo?username=hbolive` * $\_SERVER\['PHP\_SELF'\] 得到:/php/index.php/test/foo * $\_SERVER\['SCRIPT\_NAME'\] 得到:/php/index.php * $\_SERVER\['REQUEST\_URI'\] 得到:/php/index.php/test/foo?username=hbolive `http://www.5idev.com/` * $\_SERVER\['PHP\_SELF'\] 得到:/index.php * $\_SERVER\['SCRIPT\_NAME'\] 得到:/index.php * $\_SERVER\['REQUEST\_URI'\] 得到:/ 至于有人提到 $\_SERVER\['PHP\_SELF'\] 与 $\_SERVER\['SCRIPT\_NAME'\] 在 PHP 以 CGI 模式运行下会有区别。由于 PHP 在 CGI 模式运行下并不多见,测试较为麻烦,在此就不再叙述了 从该例子可以看出: 1. $\_SERVER\['PHP\_SELF'\] 则反映的是 PHP 程序本身;(相对于网站根目录的路径及 PHP 程序名称) 2. $\_SERVER\['SCRIPT\_NAME'\] 反映的是程序文件本身(这在页面需要指向自己时非常有用);(相对于网站根目录的路径及 PHP 程序文件名称。) 3. $\_SERVER\['REQUEST\_URI'\] 则反映了完整 URL 地址(不包括主机名)。(访问此页面所需的 URI ) 其实从各自的命名上,也可以体现出它们之间的细微差别。 ~~~ $_SERVER['SCRIPT_NAME'] //当前脚本的路径 dirname($_SERVER['SCRIPT_NAME'] //dirname() 返回路径中的目录部分 $_SERVER['SCRIPT_FILENAME'] //当前脚本执行的绝对路径 $_SERVER['HTTP_HOST'] //获取当前域名 $_SERVER['SERVER_NAME'] //输出配置文件httpd.conf中的ServerName,一般情况下与HTTP_HOST值相同 $_SERVER['SystemRoot'] //当前服务器的操作系统的目录 $_SERVER['SERVER_SOFTWARE'] //服务器软件配置信息 $_SERVER['SERVER_PORT'] //服务器端口 $_SERVER ['REMOTE_PORT'] //用户连接到服务器时所使用的端口 $_SERVER['SERVER_ADDR'] //服务器的ip地址 $_SERVER['REMOTE_ADDR'] //浏览网页的用户ip。 $_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的根目录 $_SERVER['REQUEST_SCHEME'] //服务器通信协议,是http或https。 $_SERVER['SERVER_ADMIN'] //服务器管理员信息 $_SERVER['REQUEST_METHOD'] //请求数据的方式 $_SERVER['REQUEST_URI'] //当前脚本路径,根目录之后的目录 $_SERVER['PHP_SELF'] //当前正在执行脚本的文件名 $_SERVER['REQUEST_TIME'] //得到请求开始时的时间戳。 $_SERVER['HTTP_COOKIE'] //获取浏览器的cookie信息。 $_SERVER['HTTP_CONNECTION'] //当前请求的连接情况 $_SERVER['HTTP_USER_AGENT'] //获取用户相关信息,包括用户浏览器、操作系统等信息 $_SERVER['HTTP_ACCEPT'] //当前请求的ACCEPT头部信息 $_SERVER['HTTP_ACCEPT_LANGUAGE'] //返回用户默认的语言设置,后面的q值表示用户对该语言的喜好程度 ~~~ ``` $indicesServer = array( 'PHP_SELF'=>"当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/foo/bar.php 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /foo/bar.php。__FILE__ 常量包含当前(例如包含)文件的完整路径和文件名。 如果 PHP 以命令行模式运行,这个变量将包含脚本名", 'SCRIPT_NAME'=>"包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名", 'REQUEST_URI'=>"URI 用来指定要访问的页面。例如 “/index.html”", 'argv'=>"传递给该脚本的参数的数组。当脚本以命令行方式运行时,argv 变量传递给程序 C 语言样式的命令行参数。当通过 GET 方式调用时,该变量包含query string。(支持web、CLI)", 'argc'=>"包含命令行模式下传递给该脚本的参数的数目(如果运行在命令行模式下)。", 'GATEWAY_INTERFACE'=>"服务器使用的 CGI 规范的版本;例如,“CGI/1.1”", 'SERVER_ADDR'=>"当前运行脚本所在的服务器的 IP 地址", 'SERVER_NAME'=>"当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定 注意: 在 Apache 2 里,必须设置 UseCanonicalName = On 和 ServerName。 否则该值会由客户端提供,就有可能被伪造。 上下文有安全性要求的环境里,不应该依赖此值", 'SERVER_SOFTWARE'=>"服务器标识字符串,在响应请求时的头信息中给出", 'SERVER_PROTOCOL'=>"请求页面时通信协议的名称和版本。例如,“HTTP/1.0”", 'REQUEST_METHOD'=>"访问页面使用的请求方法;例如,“GET”, “HEAD”(在产生任何输出后,不再有输出缓冲),“POST”,“PUT”", 'REQUEST_TIME'=>"请求开始时的时间戳。", 'REQUEST_TIME_FLOAT'=>"请求开始时的时间戳,微秒级别的精准度", 'QUERY_STRING'=>"query string(查询字符串),如果有的话,通过它进行页面访问", 'DOCUMENT_ROOT'=>"当前运行脚本所在的文档根目录。在服务器配置文件中定义", 'HTTP_ACCEPT'=>"当前请求头中 Accept: 项的内容,如果存在的话", 'HTTP_ACCEPT_CHARSET'=>"当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:“iso-8859-1,*,utf-8”", 'HTTP_ACCEPT_ENCODING'=>"当前请求头中 Accept-Encoding: 项的内容,如果存在的话。例如:“gzip”", 'HTTP_ACCEPT_LANGUAGE'=>"当前请求头中 Accept-Language: 项的内容,如果存在的话。例如:“en”", 'HTTP_CONNECTION'=>"前请求头中 Connection: 项的内容,如果存在的话。例如:“Keep-Alive”", 'HTTP_HOST'=>"当前请求头中 Host: 项的内容,如果存在的话", 'HTTP_REFERER'=>"引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信", 'HTTP_USER_AGENT'=>"当前请求头中 User-Agent: 项的内容,如果存在的话。该字符串表明了访问该页面的用户代理的信息。一个典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。除此之外,你可以通过 get_browser() 来使用该值,从而定制页面输出以便适应用户代理的性能", 'HTTPS'=>"如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。", 'REMOTE_ADDR'=>"浏览当前页面的用户的 IP 地址", 'REMOTE_HOST'=>"浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR 注意: 你的服务器必须被配置以便产生这个变量。例如在 Apache 中,你需要在 httpd.conf 中设置 HostnameLookups On 来产生它", 'REMOTE_PORT'=>"用户机器上连接到 Web 服务器所使用的端口号", 'REMOTE_USER'=>"经验证的用户", 'REDIRECT_REMOTE_USER'=>"验证的用户,如果请求已在内部重定向。", 'SCRIPT_FILENAME'=>"当前执行脚本的绝对路径 如果在命令行界面(Command Line Interface, CLI)使用相对路径执行脚本,例如 file.php 或 ../file.php,那么 $_SERVER['SCRIPT_FILENAME'] 将包含用户指定的相对路径", 'SERVER_ADMIN'=>"该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值", 'SERVER_PORT'=>"Web 服务器使用的端口。默认值为 “80”。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口 注意: 在 Apache 2 里,为了获取真实物理端口,必须设置 UseCanonicalName = On 以及 UseCanonicalPhysicalPort = On。 否则此值可能被伪造,不一定会返回真实端口值。 上下文有安全性要求的环境里,不应该依赖此值", 'SERVER_SIGNATURE'=>"包含了服务器版本和虚拟主机名的字符串。", 'PATH_TRANSLATED'=>"当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果 注意: Apache 2 用户可以在 httpd.conf 中设置 AcceptPathInfo = On 来定义 PATH_INFO", 'PHP_AUTH_DIGEST'=>"当作为 Apache 模块运行时,进行 HTTP Digest 认证的过程中,此变量被设置成客户端发送的“Authorization” HTTP 头内容(以便作进一步的认证操作)", 'PHP_AUTH_USER'=>"当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名", 'PHP_AUTH_PW'=>"当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码", 'AUTH_TYPE'=>"当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型", 'PATH_INFO'=>"包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息,如果存在的话。例如,如果当前脚本是通过 URL http://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问,那么 $_SERVER['PATH_INFO'] 将包含 /some/stuff", 'ORIG_PATH_INFO'=>"在被 PHP 处理之前,“PATH_INFO” 的原始版本", 'REDIRECT_URL'=>"当前PHP文件的URL路径名" ) ; ``` 每个服务器提供的参数都不一样,所以详细的参数参看[RFC 3875](http://www.faqs.org/rfcs/rfc3875.html)