超全域變數在腳本所有作用域自動可用,無需 global 宣告。PHP 定義 9 個超全域變數,本文詳細說明各自用途與常用鍵值。
$GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILES$_ENV$_COOKIE$_SESSION$x = 75; $y = 25;
function add() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; }
add();
echo $z; // 100
| 鍵名 | 說明 | 範例 |
|---|---|---|
| PHP_SELF | 當前腳本路徑 | /index.php |
| SERVER_NAME | 伺服器主機名 | example.com |
| HTTP_HOST | 請求 Host 標頭 | example.com:8080 |
| HTTP_REFERER | 來源頁面 (不可靠) | https://google.com/ |
| HTTP_USER_AGENT | 瀏覽器識別字串 | Mozilla/5.0... |
| SCRIPT_NAME | 當前腳本路徑 | /index.php |
| REQUEST_METHOD | 請求方法 | GET, POST |
| REQUEST_TIME | 請求開始時間戳 | 1700000000 |
| QUERY_STRING | 查詢字串 | id=1&page=2 |
| REMOTE_ADDR | 客戶端 IP | 192.168.1.1 |
| SERVER_ADDR | 伺服器 IP | 10.0.0.1 |
| SERVER_PORT | 伺服器埠號 | 80 |
| HTTPS | 是否 HTTPS | on / 空 |
$name = $_REQUEST['fname']; // 同時支援 ?fname=xxx 或 POST fname=xxx // 注意:鍵名衝突時優先順序由 variables_order 決定 (預設 GPC)
建議: 明確使用 $_GET 或 $_POST,避免來源混淆。
<form method="post" action="?>
Name: <input name="fname">
<input type="submit">
</form>
<?php $name = $_POST['fname']; ?>
<a href="test.php?subject=PHP&web=example.com">連結</a> // test.php echo $_GET['subject']; // PHP echo $_GET['web']; // example.com
$_FILES['myfile']['name'] // 原始檔名 $_FILES['myfile']['type'] // MIME 類型 $_FILES['myfile']['tmp_name'] // 暫存路徑 $_FILES['myfile']['error'] // 錯誤代碼 (0=成功) $_FILES['myfile']['size'] // 檔案大小 (bytes)
setcookie('user', 'John', time()+3600);
echo $_COOKIE['user']; // John
session_start(); $_SESSION['user_id'] = 123; echo $_SESSION['user_id']; // 123
echo $_ENV['HOME']; // /home/user
filter_input()、filter_var() 進行輸入驗證htmlspecialchars() 防 XSS$_REQUEST 易造成安全漏洞,**建議禁用或僅在必要時使用**熟悉 9 大超全域變數用途與常用鍵值,配合輸入驗證與輸出轉義,是 PHP 安全開發的基石。