| 變數名 | 說明 | 實務用途 |
|---|---|---|
PHP_SELF | 當前執行腳本路徑(相對 DocumentRoot) | 表單 action、分頁連結 |
argv | 命令列參數陣列 | CLI 腳本參數解析 |
argc | 命令列參數個數 | CLI 參數檢查 |
GATEWAY_INTERFACE | CGI 規範版本(如 CGI/1.1) | 環境相容性檢查 |
SERVER_NAME | 伺服器主機名 | 生成絕對 URL、多站點識別 |
SERVER_SOFTWARE | 伺服器軟體標識(Apache/2.4...) | 相容性判斷、診斷日誌 |
SERVER_PROTOCOL | 請求協議(HTTP/1.1、HTTP/2) | HTTP/2 推送判斷 |
REQUEST_METHOD | 請求方法(GET/POST/PUT/DELETE) | RESTful 路由分發 |
QUERY_STRING | 查詢字串(? 後內容) | 分頁保持參數、簽名驗證 |
DOCUMENT_ROOT | 文檔根目錄絕對路徑 | 檔案包含路徑基準 |
HTTP_ACCEPT | Accept 標頭 | 內容協商(JSON/HTML/XML) |
HTTP_ACCEPT_CHARSET | Accept-Charset | 編碼協商 |
HTTP_ACCEPT_ENCODING | Accept-Encoding(gzip, deflate, br) | 響應壓縮判斷 |
HTTP_ACCEPT_LANGUAGE | Accept-Language(zh-TW,en;q=0.9) | 多語系自動切換 |
HTTP_CONNECTION | Connection(keep-alive, close) | 長連接管理 |
HTTP_HOST | Host 標頭(含端口) | 生成完整域名、防 Host 注入 |
HTTP_REFERER | 來源頁面 URL(可偽造) | 防盜鏈、來源統計(僅參考) |
HTTP_USER_AGENT | User-Agent 字串 | 裝置識別、瀏覽器兼容、爬蟲識別 |
HTTPS | 非空表 HTTPS(通常 'on') | 強制 HTTPS 判斷、生成安全連結 |
REMOTE_ADDR | 客戶端 IP(可能為代理) | 限流、地理定位、風控 |
REMOTE_HOST | 客戶端主機名(需 DNS 反解) | 極少用,效能差 |
REMOTE_PORT | 客戶端連接埠 | 連接追蹤、日誌關聯 |
SCRIPT_FILENAME | 當前腳本絕對路徑 | require_once 路徑基準、效能分析 |
SERVER_ADMIN | 管理員 Email(Apache 設定) | 錯誤通知收件人 |
SERVER_PORT | 伺服器監聽埠(80/443/其他) | 生成正確連結、非標準埠處理 |
SERVER_SIGNATURE | 伺服器版本與虛擬主機資訊 | 錯誤頁面頁尾 |
PATH_TRANSLATED | 腳本在檔案系統的實際路徑 | CGI 模式下路徑映射 |
SCRIPT_NAME | 當前腳本路徑(含前導 /) | 自我引用 URL、路由匹配基準 |
REQUEST_URI | 完整請求 URI(含查詢字串) | 路由解析、重寫規則、日誌記錄 |
PHP_AUTH_USER | HTTP Basic Auth 用戶名 | 簡易認證、API 金鑰驗證 |
PHP_AUTH_PW | HTTP Basic Auth 密碼 | 同上 |
AUTH_TYPE | 認證類型 | 驗證機制識別 |
HTTP_* 變數來自客戶端請求標頭,可任意偽造(含 HTTP_REFERER、HTTP_X_FORWARDED_FOR、HTTP_USER_AGENT)。$_SERVER['http_host'] 會取不到值。REQUEST_URI、HTTP_HOST 等 Web 專用變數,但有 argv/argc。REMOTE_ADDR 為代理 IP,真實 IP 需配合 Web Server real_ip 模組或應用層解析 X-Forwarded-For。// 取得完整當前 URL
function current_url(): string {
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME'];
$uri = $_SERVER['REQUEST_URI'] ?? '';
return $scheme . '://' . $host . $uri;
}
// 判斷是否 AJAX 請求
function is_ajax(): bool {
return (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
}
// 判斷是否 HTTPS
function is_https(): bool {
return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https');
}
$_SERVER 是 PHP 與 Web Server 互動的核心介面,熟悉各變數含義與陷阱,能寫出更健壯、可移植的應用。