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

PHP 超級全局變量完全指南:$GLOBALS、$_SERVER、$_REQUEST、$_POST、$_GET、$_FILES、$_ENV、$_COOKIE、$_SESSION 深度解析

     編輯:PHP 綜合知識

超級全局變量特性

  • 在**所有作用域**自動可用 (函數、類、命名空間無需 global 聲明)
  • PHP 4.1.0+ 引入,替代舊式 $HTTP_*_VARS 數組
  • 不可被用戶代碼重寫 (受 Zend 引擎保護)

九大超級全局變量詳細解析

1. $GLOBALS — 全局符號表引用

$x = 75; $y = 25;
function addition() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; // 直接操作全局變量
}
addition();
echo $z; // 100
  • 關聯數組,鍵名 = 全局變量名
  • $GLOBALS['var'] 等價於全局作用域 $var
  • 遞歸包含自身:$GLOBALS['GLOBALS'] === $GLOBALS

2. $_SERVER — 服務器與執行環境信息

由 Web 服務器 (Apache/Nginx/PHP-FPM) 填充,常用項:

鍵名含義示例
PHP_SELF當前腳本路徑 (相對 DocumentRoot)/index.php
SERVER_NAME服務器主機名www.example.com
HTTP_HOST請求 Host 頭www.example.com:8080
REQUEST_URI請求 URI (含查詢字符串)/page?id=1
REQUEST_METHODHTTP 方法GET/POST/PUT
QUERY_STRING查詢字符串id=1&name=test
HTTP_USER_AGENT客戶端 User-AgentMozilla/5.0...
HTTP_REFERER來源頁面 (不可靠,可偽造)https://google.com/
REMOTE_ADDR客戶端 IP192.168.1.1
SERVER_ADDR服務器 IP10.0.0.1
SCRIPT_FILENAME當前腳本絕對路徑/var/www/html/index.php
REQUEST_TIME請求開始時間戳 (PHP 5.1+)1700000000
HTTPS是否 HTTPS (非空表示是)on

⚠️ **不可信項**:HTTP_REFERER、HTTP_X_FORWARDED_FOR (代理頭) 均可偽造,安全決策勿依賴。

3. $_REQUEST — 合併輸入數據

  • 默認合併 $_GET、$_POST、$_COOKIE
  • 順序受 request_order (PHP 5.3+) 或 variables_order 控制,默認 GP (GET 後 POST,POST 覆蓋 GET)
  • **不推薦使用**:來源不明確,安全審計困難,明確使用 $_GET/$_POST/$_COOKIE

4. $_POST — POST 請求體數據

  • Content-Type: application/x-www-form-urlencoded 或 multipart/form-data
  • 僅包含解析後的鍵值對,**不含文件數據** (文件在 $_FILES)
  • 大小限制:post_max_size (默認 8M)

5. $_GET — 查詢字符串參數

  • URL ? 後參數自動解析
  • 長度限制:瀏覽器/服務器通常 2KB-8KB
  • 適用:幂等查詢、分頁、篩選、搜索

6. $_FILES — 文件上傳信息

// 單文件上傳表單
// <input type="file" name="avatar">

$_FILES['avatar'] = [
    'name'     => 'photo.jpg',      // 客戶端文件名
    'type'     => 'image/jpeg',     // MIME 類型 (客戶端提供,不可信)
    'tmp_name' => '/tmp/phpXyz123', // 服務器臨時路徑
    'error'    => 0,                // 錯誤碼 (0=成功, 1=超過 upload_max_filesize, 4=無文件)
    'size'     => 123456,           // 文件大小 (字節)
];

多文件 name="files[]" 時結構為多維數組。

7. $_ENV — 環境變量

  • 從 Shell 環境、.env、Web 服務器配置獲取
  • 受 variables_order 控制 (需包含 E)
  • 現代框架 (Laravel/Symfony) 使用 vlucas/phpdotenv 讀取 .env,不直接依賴 $_ENV

8. $_COOKIE — HTTP Cookie

  • 客戶端發送的 Cookie 自動解析
  • 設置:setcookie('name', 'value', time()+3600, '/', 'example.com', true, true)
  • 安全屬性:HttpOnly (防 XSS)、Secure (僅 HTTPS)、SameSite (防 CSRF)
  • 大小限制:單個 4KB,域名總計 ~20-50 個

9. $_SESSION — 會話數據

  • 服務端存儲,客戶端僅持有 Session ID (默認 Cookie PHPSESSID)
  • 啟動:session_start() (必須在輸出前調用)
  • 配置關鍵:session.save_handler (files/redis/memcached)、session.gc_maxlifetime
  • 銷毀:session_destroy() + $_SESSION = [] + 刪除 Cookie

安全最佳實踐

變量風險防範
$_GET/$_POST/$_REQUESTXSS、SQL注入、CSRF輸出轉義、預處理語句、CSRF Token
$_SERVER['HTTP_REFERER']偽造來源不做安全決策依據
$_FILES任意文件上傳驗證類型/大小、重命名、存儲隔離、掃描
$_COOKIE會話劫持、XSSHttpOnly、Secure、SameSite、簽名驗證
$_SESSION會話固定、劫持session_regenerate_id(true)、安全存儲

總結

九大超級全局變量覆蓋了 PHP 應用的所有輸入來源與環境信息。核心原則:**明確來源** (用 $_GET/$_POST 而非 $_REQUEST)、**不信任輸入** (驗證、過濾、轉義)、**最小權限** (Cookie/Session 安全屬性全開)。現代框架封裝了請求對象 (Request) 統一訪問,建議使用框架 API 而非直接操作超級全局變量。

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