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

PHP 九大超級全域變數總覽:$_SERVER、$_GET、$_POST 等完整解析

     編輯:PHP 相關知識

PHP 九大超級全域變數總覽

超級全域變數在**所有作用域**皆可直接存取,無需 `global` 關鍵字。PHP 定義了 9 個預設超級全域陣列,涵蓋伺服器環境、請求輸入、會話、檔案上傳等核心資訊。

1. $_SERVER — 伺服器與執行環境資訊

由 Web 伺服器建立,包含 CGI/HTTP 標準變數。常用鍵:

鍵名說明範例
HTTP_HOST請求 Host 標頭example.com
REQUEST_URI請求 URI (含查詢字串)/search?q=php
REQUEST_METHODHTTP 方法GET, POST
QUERY_STRING查詢字串q=php&page=1
HTTP_USER_AGENT客戶端 UA 字串Mozilla/5.0...
HTTP_REFERER來源頁面 URL (不可靠)https://google.com/
REMOTE_ADDR客戶端 IP203.0.113.45
SERVER_ADDR伺服器 IP192.168.1.10
SCRIPT_FILENAME當前執行腳本絕對路徑/var/www/html/index.php
PHP_SELF當前腳本相對文檔根目錄路徑/index.php

安全提醒:`$_SERVER` 部分值來自客戶端標頭 (如 `HTTP_X_FORWARDED_FOR`、`HTTP_REFERER`),**不可直接信任**,用於安全決策前必須驗證。

2. $_GET — URL 查詢字串參數

自動解析 `QUERY_STRING`,鍵值對應參數名與值 (已 `urldecode`)。
範例:`/search?q=php&tag=web` → `$_GET['q']='php'`, `$_GET['tag']='web'`。

3. $_POST — POST 請求主體參數

解析 `application/x-www-form-urlencoded` 或 `multipart/form-data` 主體。
僅限 `Content-Type` 為上述兩者時自動填充;JSON/原始資料需自行讀取 `php://input`。

4. $_COOKIE — HTTP Cookie

包含客戶端發送的所有 Cookie 鍵值對。
設定 Cookie 用 `setcookie()`,修改 `$_COOKIE` **不會** 發送 `Set-Cookie` 標頭。

5. $_FILES — 檔案上傳資訊

二維陣列,第一層鍵為 `` 的 `name` 屬性值。
每個檔案項包含:

鍵說明
name客戶端原始檔名
typeMIME 型別 (客戶端提供,不可信)
tmp_name伺服器暫存路徑 (需 `move_uploaded_file()` 移動)
size檔案大小 (位元組)
error錯誤代碼 (0=成功, 1=超過 upload_max_filesize, 2=超過 MAX_FILE_SIZE, 3=部分上傳, 4=無檔案)

6. $_ENV — 環境變數

從 Shell 環境繼承的變數 (如 `PATH`、`HOME`、`APP_ENV`)。
受 `php.ini` `variables_order` 控制 (預設包含 `E`)。Docker/雲端部署常透過環境變數注入配置。

7. $_REQUEST — 合併請求參數

合併 `$_GET`、`$_POST`、`$_COOKIE` (順序由 `variables_order` 決定,預設 `GPC`)。
不建議使用:來源模糊、安全性較差、易掩蓋同名參數。優先使用明確的 `$_GET`/`$_POST`/`$_COOKIE`。

8. $_SESSION — 會話資料

依賴 `session_start()` 初始化。儲存於伺服器端 (預設檔案),客戶端僅持有 Session ID (Cookie `PHPSESSID`)。
適用於跨請求保持用戶狀態 (登入資訊、購物車、CSRF Token)。

9. $GLOBALS — 所有全域變數的超集

陣列鍵為全域變數名,值為對應變數引用。
`$GLOBALS['foo']` 與全域作用域 `$foo` **指向同一 zval**。
可用於動態變數名存取、除錯列印所有全域狀態。

變數順序與安全配置

; php.ini
variables_order = "GPCS" ; 預設:GET, POST, COOKIE, SERVER (無 E 環境變數)
request_order = "GP"     ; $_REQUEST 僅合併 GET, POST (較安全)
; 建議生產環境移除 C (Cookie) 避免 $_REQUEST 被 Cookie 污染

最佳實踐

  • **輸入過濾**:使用 `filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)` 等替代直接存取 `$_GET['id']`。
  • **最小權限**:僅從預期來源讀取參數 (如 API 只讀 `$_POST`/`php://input`)。
  • **關閉 register_globals** (PHP 5.4+ 已移除),防止全域變數注入。
  • **Session 安全**:`session.cookie_httponly=1`、`session.cookie_secure=1` (HTTPS)、`session.use_strict_mode=1`。

熟悉九大超級全域變數的來源、範圍與安全特性,是編寫健壯 PHP 應用的基礎。

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