首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP $_SERVER 超全局變量完整圖鑑:30+ 關鍵鍵值實戰速查

     編輯:PHP 相關知識

$_SERVER 核心作用

包含 HTTP 頭、腳本路徑、服務器信息、請求元數據等關鍵環境變量,是 Web 開發中獲取請求上下文的核心入口。

高頻使用鍵值分類速查

分類鍵名說明示例值
請求信息REQUEST_METHODHTTP 方法GET, POST, PUT, DELETE
REQUEST_URI完整請求 URI/api/user?id=123
QUERY_STRING查詢字符串id=123&page=2
HTTP_REFERER來源頁面 URLhttps://google.com/search?q=php
HTTP_USER_AGENT客戶端標識Mozilla/5.0... Chrome/119.0
CONTENT_TYPE請求體類型application/json
腳本路徑SCRIPT_FILENAME當前腳本絕對路徑/var/www/html/index.php
SCRIPT_NAME腳本路徑(Web 可訪問)/index.php
PHP_SELF相對 DocumentRoot 路徑/index.php
DOCUMENT_ROOTWeb 根目錄/var/www/html
PATH_INFO路徑額外信息/api/user/123
服務器信息SERVER_NAME主機名example.com
SERVER_PORT端口80, 443
SERVER_PROTOCOL協議版本HTTP/1.1, HTTP/2
SERVER_SOFTWAREServer 軟件nginx/1.24.0
客戶端信息REMOTE_ADDR客戶端 IP203.0.113.195
REMOTE_PORT客戶端端口54321
REMOTE_HOST客戶端主機名host.example.com
HTTP_X_FORWARDED_FOR代理鏈 IP(需信任代理)203.0.113.195, 198.51.100.1
HTTPS/CLIHTTPS是否 HTTPSon / off
REQUEST_TIME請求開始 Unix 時間戳1699999999
REQUEST_TIME_FLOAT微秒級時間戳1699999999.1234
argv / argcCLI 參數數組/個數['arg1', 'arg2'] / 2

安全與可靠性關鍵提醒

  • HTTP_* 頭可偽造:HTTP_X_FORWARDED_FOR、HTTP_REFERER、HTTP_USER_AGENT 皆不可信
  • 真實 IP 獲取:需配合受信代理配置(如 Nginx real_ip_header、set_real_ip_from)
  • CLI 模式差異:無 HTTP_*、REQUEST_URI 等 Web 專屬鍵
  • 大小寫敏感:鍵名區分大小寫,標準為大寫

實用封裝:Request 類雛形

<?php
class ServerRequest
{
    public function getClientIp(): string
    {
        // 遞歸檢查代理頭(需配置受信代理列表)
        foreach (['HTTP_CF_CONNECTING_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'] as $key) {
            if (!empty($_SERVER[$key])) {
                $ips = array_map('trim', explode(',', $_SERVER[$key]));
                return $ips[0];
            }
        }
        return 'unknown';
    }

    public function isHttps(): bool
    {
        return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
            || ($_SERVER['SERVER_PORT'] ?? 80) === 443;
    }

    public function getBaseUrl(): string
    {
        $scheme = $this->isHttps() ? 'https' : 'http';
        $host = $_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME'] ?? 'localhost';
        return $scheme . '://' . $host;
    }
}

調試輸出所有可用鍵值

<?php
// 僅開發環境使用
echo '<pre>';
print_r($_SERVER);
echo '</pre>';

$_SERVER 變量輸出示例

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved