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

PHP 預定義變數 $_SERVER 完整指南:伺服器環境與請求資訊詳解

     編輯:PHP 綜合知識

前言

$_SERVER 是 PHP 最重要的超全域變數之一,包含伺服器環境、請求標頭、腳本路徑等關鍵資訊。本文系統整理常用鍵值、實戰範例與注意事項,助你精準獲取執行上下文資訊。

一、常用鍵值速查表

鍵名說明範例值
PHP_SELF當前執行腳本路徑(相對 Document Root)/test.php/foo.bar
SERVER_PROTOCOL通訊協定名稱與版本HTTP/1.1
REQUEST_METHOD請求方法GET, POST, PUT
REQUEST_TIME請求開始時間戳(PHP 5.1.0+)1699900000
QUERY_STRING查詢字串(? 之後內容)id=1&name=test
DOCUMENT_ROOT腳本所在文檔根目錄/var/www/html
HTTP_ACCEPTAccept 標頭內容text/html,application/xhtml+xml
HTTP_HOSTHost 標頭(域名:埠)example.com:80
HTTP_REFERER來源頁面 URL(不可靠,可偽造)https://google.com/
HTTP_USER_AGENT用戶代理字串Mozilla/5.0...
REMOTE_ADDR客戶端 IP 位址192.168.1.1
REMOTE_PORT客戶端連接埠54321
SCRIPT_FILENAME當前執行腳本絕對路徑/var/www/html/index.php
SERVER_PORT伺服器監聽埠80 或 443
REQUEST_URI請求 URI(含查詢字串)/index.php?id=1
PHP_AUTH_USERHTTP 認證使用者名稱(Apache 模組模式)admin
PHP_AUTH_PWHTTP 認證密碼secret

二、實戰範例:取得完整當前 URL

<?php
$url_this = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
echo $url_this; // 輸出:https://localhost/lu.php
?>

三、進階應用:建立通用請求資訊類

<?php
class RequestInfo {
    public static function getClientIP() {
        $keys = ['HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'];
        foreach ($keys as $key) {
            if (!empty($_SERVER[$key])) {
                $ips = explode(',', $_SERVER[$key]);
                return trim($ips[0]);
            }
        }
        return 'unknown';
    }

    public static function isAjax() {
        return isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
            && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
    }

    public static function isHttps() {
        return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
            || $_SERVER['SERVER_PORT'] == 443;
    }

    public static function getFullUrl() {
        $scheme = self::isHttps() ? 'https' : 'http';
        $host = $_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME'];
        $uri = $_SERVER['REQUEST_URI'] ?? '';
        return $scheme . '://' . $host . $uri;
    }
}

// 使用範例
echo "Client IP: " . RequestInfo::getClientIP() . "\n";
echo "Is AJAX: " . (RequestInfo::isAjax() ? 'Yes' : 'No') . "\n";
echo "Full URL: " . RequestInfo::getFullUrl() . "\n";
?>

四、重要注意事項

  1. 不可靠的變數:HTTP_REFERER、HTTP_X_FORWARDED_FOR 等標頭可被客戶端偽造,安全敏感場景勿直接信任。
  2. CLI 模式下失效:命令列執行時,大多數 $_SERVER 變數無意義或不存在。
  3. 版本差異:REQUEST_TIME 需 PHP 5.1.0+;$_SERVER 自 PHP 4.1.0 起可用,舊版使用 $HTTP_SERVER_VARS(非超全域)。
  4. 註冊全域變數:若 register_globals=On(已棄用),會汙染全域命名空間,嚴重安全風險,務必關閉。
  5. 大小寫敏感:鍵名區分大小寫,統一使用大寫(如 HTTP_HOST)。

五、魔術常數對比

常混淆的魔術常數與 $_SERVER 關係:

常數說明範例
__FILE__目前檔案完整路徑(含檔名)/var/www/html/config.php
__DIR__目前檔案所在目錄(PHP 5.3+)/var/www/html
__LINE__目前行號25
PHP_OS伺服器作業系統Linux
PHP_VERSIONPHP 版本8.2.10

善用 $_SERVER 與魔術常數,能構建健壯的路由、日誌、安全防護與多環境適配機制。建議封裝為服務類,集中管理與擴展。

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