$_SERVER 数组

PHP 的 $_SERVER 是一个预定义的超全局数组,它存储了服务器和当前请求的相关信息。这些信息包括请求头、脚本路径、客户端信息等,具体内容取决于服务器环境(如 Apache、Nginx)。

可以将 $_SERVER 数组的元素按来源和用途分为以下几类:

1. 服务器信息

这些值由 Web 服务器(如 Apache/Nginx) 生成,描述服务器自身的配置和环境。

元素名 来源说明
SERVER_SOFTWARE 服务器软件名称(如 Apache/2.4.41nginx/1.18.0)。
SERVER_NAME 服务器域名(基于虚拟主机配置)。
SERVER_ADDR 服务器 IP 地址。
SERVER_PORT 服务器监听的端口(如 80443)。
SERVER_PROTOCOL HTTP 协议版本(如 HTTP/1.1)。
DOCUMENT_ROOT 网站根目录的绝对路径(如 /var/www/html)。

2. 客户端请求信息

这些值由 客户端(浏览器/设备) 发送的 HTTP 请求头提供,其中 HTTP_* 开头的字段(如 HTTP_REFERERHTTP_USER_AGENT均来自客户端请求头,也就是可以通过修改请求头自定义写入 $_SERVER 数组的元素。

元素名 来源说明
REQUEST_METHOD HTTP 请求方法(如 GETPOST)。
HTTP_USER_AGENT 客户端浏览器和操作系统信息(如 Mozilla/5.0... Chrome/120.0...)。
HTTP_REFERER 用户来源页面的 URL(可能为空或被篡改)。
HTTP_ACCEPT_LANGUAGE 客户端接受的语言(如 en-US,en;q=0.9)。
HTTP_X_FORWARDED_FOR 经过代理时的客户端原始 IP(需代理服务器支持,可能被伪造)。

例如,如果请求头中添加 Flag: value 字段, $_SERVER 数组中也会生成对应的元素 $_SERVER[HTTP_FLAG] 。注意添加了前缀 HTTP_ 并全部大写。

3. 脚本路径信息

Web 服务器 根据请求的 URL 和文件路径生成。

元素名 来源说明
PHP_SELF 当前脚本的相对路径(如 /index.php)。易受 XSS 攻击,需转义输出!
SCRIPT_FILENAME 当前脚本的绝对路径(如 /var/www/index.php)。
SCRIPT_NAME 当前脚本的路径(与 PHP_SELF 类似,但更安全)。
REQUEST_URI 请求的 URI(包含查询参数,如 /page.php?id=1)。
QUERY_STRING URL 中的查询字符串(如 id=1&name=test )。

4. 客户端网络信息

Web 服务器 从 TCP/IP 连接中获取,部分可能被代理影响。

元素名 来源说明
REMOTE_ADDR 客户端 IP 地址(直接连接的 IP,代理场景下可能是代理服务器 IP)。
REMOTE_PORT 客户端使用的端口号。

5. HTTPS 和安全相关

Web 服务器 根据连接协议生成。

元素名 来源说明
HTTPS 如果通过 HTTPS 访问,值为 on,否则为空。
REQUEST_SCHEME 请求的协议(如 httphttps)。
SERVER_PORT_SECURE 如果使用 HTTPS,值为 1,否则为空(部分服务器支持)。

6. 其他特殊字段

元素名 来源说明
GATEWAY_INTERFACE 服务器使用的 CGI 版本(如 CGI/1.1)。
PATH_TRANSLATED 服务器将路径映射到文件系统的结果(部分服务器支持)。