$_SERVER 是 PHP 中最重要的超全域變數之一,包含了伺服器環境、請求資訊與執行上下文等關鍵資料。本文系統整理 32 個常用鍵值的用途與範例。
腳本與請求基礎資訊
| 變數 | 說明 | 範例值 |
| PHP_SELF | 目前執行腳本的檔案名 | /index.php |
| REQUEST_METHOD | 請求方法 | GET、POST、PUT |
| REQUEST_TIME | 請求開始時間戳 (PHP 5.1.0+) | 1699900000 |
| QUERY_STRING | URL 查詢字串 | id=123&name=test |
| REQUEST_URI | 完整請求 URI | /index.php?id=123 |
| SCRIPT_FILENAME | 腳本絕對路徑 | /var/www/html/index.php |
| SCRIPT_NAME | 腳本路徑 (含檔名) | /index.php |
伺服器環境資訊
| 變數 | 說明 | 範例值 |
| SERVER_NAME | 主機名稱 | example.com |
| SERVER_SOFTWARE | 伺服器軟體識別 | Apache/2.4.41 |
| SERVER_PROTOCOL | 通訊協定版本 | HTTP/1.1 |
| SERVER_PORT | 伺服器連接埠 | 80、443 |
| SERVER_ADMIN | 管理員郵件 (Apache 設定) | admin@example.com |
| SERVER_SIGNATURE | 伺服器版本與虛擬主機資訊 | Apache/2.4.41 Server at... |
| DOCUMENT_ROOT | 文件根目錄 | /var/www/html |
客戶端與網路資訊
| 變數 | 說明 | 範例值 |
| REMOTE_ADDR | 客戶端 IP | 192.168.1.100 |
| REMOTE_HOST | 客戶端主機名 (需反向解析) | client.example.com |
| REMOTE_PORT | 客戶端連接埠 | 54321 |
| HTTP_USER_AGENT | 瀏覽器識別字串 | Mozilla/5.0... |
| HTTP_REFERER | 來源頁面 URL | https://google.com/ |
| HTTP_HOST | 請求的 Host 標頭 | example.com:8080 |
| HTTPS | 是否為 HTTPS 連線 | on / off |
HTTP 標頭資訊 (HTTP_* 開頭)
所有 HTTP 請求標頭會自動轉換為 HTTP_ 前綴、大寫、底線格式:
HTTP_ACCEPT - 可接受的內容型態
HTTP_ACCEPT_CHARSET - 可接受字元集
HTTP_ACCEPT_ENCODING - 可接受編碼 (gzip, deflate)
HTTP_ACCEPT_LANGUAGE - 可接受語言
HTTP_CONNECTION - 連線類型 (keep-alive)
HTTP_COOKIE - Cookie 內容
HTTP 認證相關
| 變數 | 說明 |
| PHP_AUTH_USER | HTTP 認證用戶名 |
| PHP_AUTH_PW | HTTP 認證密碼 |
| PHP_AUTH_DIGEST | Digest 認證的 Authorization 標頭 |
| AUTH_TYPE | 認證類型 (Basic/Digest) |
實務應用範例
// 取得客戶端真實 IP (考慮代理)
function getClientIP() {
$keys = ['HTTP_X_FORWARDED_FOR', 'HTTP_CLIENT_IP', 'REMOTE_ADDR'];
foreach ($keys as $key) {
if (!empty($_SERVER[$key])) {
$ips = explode(',', $_SERVER[$key]);
return trim($ips[0]);
}
}
return 'unknown';
}
// 判斷是否為 AJAX 請求
function isAjax() {
return isset($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
}
// 建立完整 URL
function getFullUrl() {
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
return $protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
安全性提醒
- 不可信任:
HTTP_REFERER、HTTP_USER_AGENT、HTTP_X_FORWARDED_FOR 等客戶端可偽造
- 較可信:
REMOTE_ADDR、REQUEST_METHOD、SERVER_* 等伺服器端變數
- 輸出前務必使用
htmlspecialchars() 防止 XSS