超級全域變數在**所有作用域**皆可直接存取,無需 `global` 關鍵字。PHP 定義了 9 個預設超級全域陣列,涵蓋伺服器環境、請求輸入、會話、檔案上傳等核心資訊。
由 Web 伺服器建立,包含 CGI/HTTP 標準變數。常用鍵:
| 鍵名 | 說明 | 範例 |
|---|---|---|
HTTP_HOST | 請求 Host 標頭 | example.com |
REQUEST_URI | 請求 URI (含查詢字串) | /search?q=php |
REQUEST_METHOD | HTTP 方法 | GET, POST |
QUERY_STRING | 查詢字串 | q=php&page=1 |
HTTP_USER_AGENT | 客戶端 UA 字串 | Mozilla/5.0... |
HTTP_REFERER | 來源頁面 URL (不可靠) | https://google.com/ |
REMOTE_ADDR | 客戶端 IP | 203.0.113.45 |
SERVER_ADDR | 伺服器 IP | 192.168.1.10 |
SCRIPT_FILENAME | 當前執行腳本絕對路徑 | /var/www/html/index.php |
PHP_SELF | 當前腳本相對文檔根目錄路徑 | /index.php |
安全提醒:`$_SERVER` 部分值來自客戶端標頭 (如 `HTTP_X_FORWARDED_FOR`、`HTTP_REFERER`),**不可直接信任**,用於安全決策前必須驗證。
自動解析 `QUERY_STRING`,鍵值對應參數名與值 (已 `urldecode`)。
範例:`/search?q=php&tag=web` → `$_GET['q']='php'`, `$_GET['tag']='web'`。
解析 `application/x-www-form-urlencoded` 或 `multipart/form-data` 主體。
僅限 `Content-Type` 為上述兩者時自動填充;JSON/原始資料需自行讀取 `php://input`。
包含客戶端發送的所有 Cookie 鍵值對。
設定 Cookie 用 `setcookie()`,修改 `$_COOKIE` **不會** 發送 `Set-Cookie` 標頭。
二維陣列,第一層鍵為 `` 的 `name` 屬性值。
每個檔案項包含:
| 鍵 | 說明 |
|---|---|
name | 客戶端原始檔名 |
type | MIME 型別 (客戶端提供,不可信) |
tmp_name | 伺服器暫存路徑 (需 `move_uploaded_file()` 移動) |
size | 檔案大小 (位元組) |
error | 錯誤代碼 (0=成功, 1=超過 upload_max_filesize, 2=超過 MAX_FILE_SIZE, 3=部分上傳, 4=無檔案) |
從 Shell 環境繼承的變數 (如 `PATH`、`HOME`、`APP_ENV`)。
受 `php.ini` `variables_order` 控制 (預設包含 `E`)。Docker/雲端部署常透過環境變數注入配置。
合併 `$_GET`、`$_POST`、`$_COOKIE` (順序由 `variables_order` 決定,預設 `GPC`)。
不建議使用:來源模糊、安全性較差、易掩蓋同名參數。優先使用明確的 `$_GET`/`$_POST`/`$_COOKIE`。
依賴 `session_start()` 初始化。儲存於伺服器端 (預設檔案),客戶端僅持有 Session ID (Cookie `PHPSESSID`)。
適用於跨請求保持用戶狀態 (登入資訊、購物車、CSRF Token)。
陣列鍵為全域變數名,值為對應變數引用。
`$GLOBALS['foo']` 與全域作用域 `$foo` **指向同一 zval**。
可用於動態變數名存取、除錯列印所有全域狀態。
; php.ini
variables_order = "GPCS" ; 預設:GET, POST, COOKIE, SERVER (無 E 環境變數)
request_order = "GP" ; $_REQUEST 僅合併 GET, POST (較安全)
; 建議生產環境移除 C (Cookie) 避免 $_REQUEST 被 Cookie 污染
熟悉九大超級全域變數的來源、範圍與安全特性,是編寫健壯 PHP 應用的基礎。