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

PHP $_SERVER 超全域變數完整參考手冊

     編輯:PHP 相關知識

概述

$_SERVER 是 PHP 自動建立的超全域陣列,包含 HTTP 標頭、腳本路徑、伺服器環境、請求資訊等關鍵資料。鍵名大小寫不敏感,但慣用大寫。本文整理 28 個常用鍵值,附帶說明、範例值與實務用法。

完整鍵值對照表

鍵名說明範例值實務用法
PHP_SELF當前執行腳本路徑 (相對 DocumentRoot)/index.php表單 action、自我引用連結
SERVER_PROTOCOL請求協定名稱與版本HTTP/1.1協定相容性檢查
REQUEST_TIME請求開始時間戳 (Unix timestamp, PHP 5.1.0+)1704067200效能計時、快取驗證
argv命令列參數陣列 (CLI 模式)Array([0] => arg1)CLI 腳本參數解析
SERVER_NAME伺服器主機名 (Host 標頭或虛擬主機設定)example.com生成絕對 URL、多站點識別
SERVER_SOFTWARE伺服器軟體識別字串Apache/2.4.41 (Ubuntu)環境診斷、相容性判斷
REQUEST_METHODHTTP 請求方法GET, POST, PUT, DELETERESTful 路由、CSRF 保護
QUERY_STRINGURL 查詢字串 (問號後內容)id=123&cat=php分頁保留參數、追蹤來源
DOCUMENT_ROOT腳本所在文件根目錄 (伺服器設定)/var/www/html檔案絕對路徑計算、安全檢查
HTTP_ACCEPT客戶端 Accept 標頭text/html,application/xhtml+xml內容協商、API 版本控制
HTTP_ACCEPT_CHARSET客戶端 Accept-Charset 標頭utf-8, iso-8859-1編碼協商
HTTP_ACCEPT_ENCODING客戶端 Accept-Encoding 標頭gzip, deflate, br判斷是否啟用壓縮輸出
HTTP_ACCEPT_LANGUAGE客戶端 Accept-Language 標頭zh-TW,zh;q=0.9,en;q=0.8多語系自動偵測
HTTP_CONNECTION客戶端 Connection 標頭keep-alive長連線處理
HTTP_HOST客戶端 Host 標頭 (含端口)example.com:8080生成正規 URL、虛擬主機路由
HTTP_REFERER來源頁面 URL (不可靠,可被偽造/攔截)https://google.com/search?q=php防盜鏈、返回上頁、統計來源
HTTP_USER_AGENT客戶端瀏覽器識別字串Mozilla/5.0 (Windows NT 10.0; Win64; x64)...裝置偵測、瀏覽器相容、爬蟲識別
HTTPSHTTPS 請求時為非空值 (通常 'on')on強制 HTTPS、生成安全連結
REMOTE_ADDR客戶端 IP 位址203.0.113.195IP 限制、地理定位、日誌記錄
REMOTE_HOST客戶端主機名 (需啟用 DNS 反查)host.example.com內網識別、安全審計
REMOTE_PORT客戶端連接埠54321連線追蹤、防火牆關聯
SCRIPT_FILENAME當前執行腳本絕對路徑/var/www/html/index.phprequire_once 路徑、檔案存在性檢查
SERVER_ADMINApache ServerAdmin 指令值webmaster@example.com錯誤通知收件者
SERVER_PORT伺服器監聽埠80 / 443生成正規 URL、非標準埠處理
SERVER_SIGNATURE伺服器版本與虛擬主機名字串 (錯誤頁面用)Apache/2.4.41 Server at example.com Port 80自定義錯誤頁面
PATH_TRANSLATED檔案系統路徑 (虛擬對應實體後)/var/www/html/path/infoPATH_INFO 處理
SCRIPT_NAME當前腳本路徑 (同 PHP_SELF 但較標準)/index.php自我引用、路由基準
REQUEST_URI完整請求 URI (含查詢字串)/index.php?id=123&cat=php路由解析、當前頁面完整 URL
PHP_AUTH_DIGESTHTTP Digest 認證 Authorization 標頭內容Digest username="user", realm="..."Digest 認證驗證
PHP_AUTH_USERHTTP Basic 認證使用者名稱adminBasic 認證、簡易存取控制
PHP_AUTH_PWHTTP Basic 認證密碼secret123Basic 認證驗證
AUTH_TYPEHTTP 認證類型Basic / Digest認證方式分派

高頻實務範例

1. 取得當前完整 URL

function getCurrentUrl() {
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
    $host = $_SERVER['HTTP_HOST'];
    $uri = $_SERVER['REQUEST_URI'];
    return $protocol . '://' . $host . $uri;
}

2. 取得客戶端真實 IP (支援代理)

function getClientIp() {
    $keys = ['HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR'];
    foreach ($keys as $key) {
        if (!empty($_SERVER[$key])) {
            $ips = explode(',', $_SERVER[$key]);
            return trim($ips[0]); // 取第一個 (最原始客戶端)
        }
    }
    return 'unknown';
}

3. 判斷 AJAX 請求

function isAjax() {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
        && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
}

4. 防盜鏈 (簡易版)

$referer = $_SERVER['HTTP_REFERER'] ?? '';
if (strpos($referer, $_SERVER['HTTP_HOST']) === false) {
    // 非本站來源,可返回 403 或預設圖片
    header('HTTP/1.1 403 Forbidden');
    exit('Hotlinking not allowed');
}

安全性與可靠性提醒

  • HTTP_* 開頭鍵值 來自客戶端請求標頭,**不可信**,嚴禁直接用於 SQL、Shell、檔案路徑等敏感操作
  • HTTP_REFERER、**HTTP_USER_AGENT、HTTP_X_FORWARDED_FOR 皆可輕易偽造
  • SERVER_NAME 受虛擬主機設定影響,不如 HTTP_HOST 可靠 (但後者也可偽造)
  • CLI 模式下 $_SERVER 缺少 HTTP_* 相關鍵,需判斷 php_sapi_name() === 'cli'

總結

$_SERVER 是 PHP 與伺服器環境溝通的橋樑。熟練掌握 REQUEST_URI、HTTP_HOST、REQUEST_METHOD、REMOTE_ADDR、HTTPS 等高頻鍵值,並謹記 **「客戶端提供的資料不可信」** 原則,能編寫更安全、可攜、高效的 PHP 應用。

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