PHP 的 $_SERVER
是一个预定义的超全局数组,它存储了服务器和当前请求的相关信息。这些信息包括请求头、脚本路径、客户端信息等,具体内容取决于服务器环境(如 Apache、Nginx)。
可以将 $_SERVER
数组的元素按来源和用途分为以下几类:
1. 服务器信息
这些值由 Web 服务器(如 Apache/Nginx) 生成,描述服务器自身的配置和环境。
元素名 | 来源说明 |
---|---|
SERVER_SOFTWARE |
服务器软件名称(如 Apache/2.4.41 或 nginx/1.18.0 )。 |
SERVER_NAME |
服务器域名(基于虚拟主机配置)。 |
SERVER_ADDR |
服务器 IP 地址。 |
SERVER_PORT |
服务器监听的端口(如 80 或 443 )。 |
SERVER_PROTOCOL |
HTTP 协议版本(如 HTTP/1.1 )。 |
DOCUMENT_ROOT |
网站根目录的绝对路径(如 /var/www/html )。 |
2. 客户端请求信息
这些值由 客户端(浏览器/设备) 发送的 HTTP 请求头提供,其中 HTTP_*
开头的字段(如 HTTP_REFERER
、HTTP_USER_AGENT
)均来自客户端请求头,也就是可以通过修改请求头自定义写入 $_SERVER
数组的元素。
元素名 | 来源说明 |
---|---|
REQUEST_METHOD |
HTTP 请求方法(如 GET 、POST )。 |
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 |
请求的协议(如 http 或 https )。 |
SERVER_PORT_SECURE |
如果使用 HTTPS,值为 1 ,否则为空(部分服务器支持)。 |
6. 其他特殊字段
元素名 | 来源说明 |
---|---|
GATEWAY_INTERFACE |
服务器使用的 CGI 版本(如 CGI/1.1 )。 |
PATH_TRANSLATED |
服务器将路径映射到文件系统的结果(部分服务器支持)。 |