$_SERVER 變量分類速查
$_SERVER 由 Web 服務器填充,包含請求、服務器、腳本、客戶端等環境信息。以下按功能分類整理 32 個常用鍵。
1. 腳本與請求路徑
| 鍵名 | 含義 | 示例 |
PHP_SELF | 當前執行腳本路徑 (相對 DocumentRoot) | /index.php |
SCRIPT_FILENAME | 當前執行腳本絕對路徑 | E:\server\index.php |
SCRIPT_NAME | 當前腳本路徑 (同 PHP_SELF,但更標準) | /index.php |
REQUEST_URI | 請求完整 URI (含查詢串) | /index.php?a=1&b=2 |
QUERY_STRING | 查詢字符串 (? 後內容) | a=1&b=2 |
PATH_TRANSLATED | 文件系統路徑 (虛擬→真實映射後) | E:\server\index.php |
2. 服務器身份與協議
| 鍵名 | 含義 | 示例 |
SERVER_NAME | 主機名 (Host 頭或配置值) | 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 (Ubuntu) Server at... |
3. 請求方法與時間
| 鍵名 | 含義 | 示例 |
REQUEST_METHOD | HTTP 方法 | GET、POST、PUT |
REQUEST_TIME | 請求開始時間戳 (秒,PHP 5.1+) | 1699900000 |
REQUEST_TIME_FLOAT | 請求開始時間戳 (微秒,PHP 5.4+) | 1699900000.1234 |
argv | CLI 參數數組 / GET 參數 (舊式) | ['a=1', 'b=2'] |
argc | 參數個數 | 2 |
4. 客戶端信息 (HTTP 頭映射)
| 鍵名 | 來源頭 | 示例 |
HTTP_HOST | Host | example.com |
HTTP_USER_AGENT | User-Agent | Mozilla/5.0... |
HTTP_REFERER | Referer | https://google.com/ |
HTTP_ACCEPT | Accept | text/html,application/xhtml+xml |
HTTP_ACCEPT_CHARSET | Accept-Charset | utf-8,iso-8859-1 |
HTTP_ACCEPT_ENCODING | Accept-Encoding | gzip, deflate, br |
HTTP_ACCEPT_LANGUAGE | Accept-Language | zh-CN,zh;q=0.9 |
HTTP_CONNECTION | Connection | keep-alive |
HTTP_COOKIE | Cookie | PHPSESSID=abc; lang=zh |
5. 客戶端網絡身份
| 鍵名 | 含義 | 注意 |
REMOTE_ADDR | 客戶端 IP | 代理下需讀 HTTP_X_FORWARDED_FOR |
REMOTE_HOST | 客戶端主機名 (反解 IP) | 需服務器啟用 HostnameLookups On |
REMOTE_PORT | 客戶端源端口 | 部分服務器不填充 |
6. HTTPS 與認證
| 鍵名 | 含義 |
HTTPS | 非空表示 HTTPS 請求 (值通常為 on) |
PHP_AUTH_USER | HTTP Basic Auth 用戶名 |
PHP_AUTH_PW | HTTP Basic Auth 密碼 |
PHP_AUTH_DIGEST | HTTP Digest Auth Authorization 頭 |
AUTH_TYPE | 認證類型 (Basic/Digest) |
7. 文檔根目錄
| 鍵名 | 含義 | 示例 |
DOCUMENT_ROOT | 當前腳本 DocumentRoot (配置值) | E:\server / /var/www/html |
實戰提示
- 獲取真實客戶端 IP:
$_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] (注意防偽造)。
- 判斷 HTTPS:
(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443。
- CLI 模式下:
$_SERVER['argv']、argc 可用;REQUEST_URI 等 Web 變量不可用。
- 安全警告:
HTTP_REFERER、HTTP_USER_AGENT、HTTP_X_FORWARDED_FOR 均可偽造,**不可用於權限判斷**。
收藏此表,調試、日誌、防禦、路由場景秒速查閱。