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

PHP $_SERVER 超全局變量完整手冊

     編輯:PHP 相關知識

$_SERVER 核心鍵值對照表

鍵名含義示例值備註
PHP_SELF當前腳本路徑(相對 Document Root)/index.php包含查詢字符串時需配合 SCRIPT_NAME
argv命令行模式下傳遞給腳本的參數數組Array ( [0] => arg1 )CLI 專用
argc命令行參數個數1CLI 專用
GATEWAY_INTERFACECGI 規範版本CGI/1.1
SERVER_NAME服務器主機名example.com虛擬主機下為 Host 頭值
SERVER_SOFTWARE服務器標識字符串Apache/2.4.41 (Ubuntu)
SERVER_PROTOCOL請求協議/版本HTTP/1.1
REQUEST_METHOD請求方法GET / POST / PUT / DELETE
QUERY_STRING查詢字符串(? 後內容)id=123&name=abc
DOCUMENT_ROOT文檔根目錄絕對路徑/var/www/htmlphp.ini/docroot 設置
HTTP_ACCEPTAccept 請求頭text/html,application/xhtml+xml
HTTP_ACCEPT_CHARSETAccept-Charset 請求頭utf-8, iso-8859-1
HTTP_ACCEPT_ENCODINGAccept-Encoding 請求頭gzip, deflate, br
HTTP_ACCEPT_LANGUAGEAccept-Language 請求頭zh-CN,zh;q=0.9,en;q=0.8
HTTP_CONNECTIONConnection 請求頭keep-alive
HTTP_HOSTHost 請求頭(含端口)example.com:8080關鍵:虛擬主機識別依賴此
HTTP_REFERER來源頁面 URL(不可靠,可偽造/缺失)https://google.com/不應用於安全判斷
HTTP_USER_AGENTUser-Agent 請求頭Mozilla/5.0 ... Chrome/119.0設備/瀏覽器識別
REMOTE_ADDR客戶端 IP203.0.113.195代理下需看 X-Forwarded-For
REMOTE_HOST客戶端主機名(需 DNS 反解,通常關閉)host.example.com罕見
REMOTE_PORT客戶端連接端口54321
SCRIPT_FILENAME當前執行腳本絕對路徑/var/www/html/index.php最可靠的腳本路徑
SERVER_ADMIN管理員郵箱(Apache ServerAdmin 指令)admin@example.com
SERVER_PORT服務器監聽端口80 / 443
SERVER_SIGNATURE服務器版本與虛擬主機名組成的字符串<address>Apache...</address>錯誤頁面常用
PATH_TRANSLATED腳本文件系統路徑(非文檔根目錄)/var/www/html/index.phpCGI 模式下不同
SCRIPT_NAME當前腳本路徑(相對 Document Root)/index.php表單 action 自提交常用
REQUEST_URI請求 URI(含查詢字符串)/index.php?id=123路由解析核心依賴
PHP_AUTH_USERHTTP 認證用戶名adminApache 模塊模式 + HTTP Auth
PHP_AUTH_PWHTTP 認證密碼secret
AUTH_TYPEHTTP 認證類型Basic / Digest
REQUEST_TIME請求開始時間戳 (秒)1700000000PHP 5.1.0+
REQUEST_TIME_FLOAT請求開始時間戳 (微秒)1700000000.1234PHP 5.4.0+

常見應用場景

1. 獲取客戶端真實 IP(考慮代理/CDN)

function getRealIp() {
    $headers = ['HTTP_X_FORWARDED_FOR', 'HTTP_X_REAL_IP', 'HTTP_CLIENT_IP'];
    foreach ($headers as $h) {
        if (!empty($_SERVER[$h])) {
            $ips = explode(',', $_SERVER[$h]);
            return trim($ips[0]);
        }
    }
    return $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
}

2. 判斷 HTTPS

$isHttps = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
          || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')
          || (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] === '443');

3. 構建當前完整 URL

$url = ($isHttps ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

4. CLI 模式下獲取參數

if (php_sapi_name() === 'cli') {
    global $argv, $argc;
    // $argv[0] 是腳本名,$argv[1...] 為參數
}

注意事項

  • 不可信任:所有 HTTP_* 來自客戶端請求頭,可偽造;REMOTE_ADDR 在反向代理下為代理 IP。
  • 環境差異:Apache mod_php、Nginx+PHP-FPM、CLI、內置服務器下部分鍵值存在差異或缺失。
  • 安全:PHP_SELF 直接輸出到表單 action 易導致 XSS,應用 htmlspecialchars($_SERVER['PHP_SELF']) 或改用 SCRIPT_NAME。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved