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

PHP 獲取網站域名與伺服器變數的通用方法

     編輯:PHP 綜合知識

問題背景

在不同伺服器環境(Apache、Nginx、IIS、CGI、CLI)中,$_SERVER 變數的可用性與命名可能不同。本文提供一個相容性極佳的封裝函數 PMA_getenv(),並示範如何安全取得 HTTP_HOST。

核心函數:PMA_getenv()

function PMA_getenv($var_name) {
    // 1. 優先從 $_SERVER 取得
    if (isset($_SERVER[$var_name])) {
        return $_SERVER[$var_name];
    }
    // 2. 嘗試 $_ENV
    elseif (isset($_ENV[$var_name])) {
        return $_ENV[$var_name];
    }
    // 3. 嘗試 getenv() 函數
    elseif (getenv($var_name)) {
        return getenv($var_name);
    }
    // 4. Apache 模組專用:apache_getenv()
    elseif (function_exists('apache_getenv') && apache_getenv($var_name, true)) {
        return apache_getenv($var_name, true);
    }
    // 5. 以上皆無則返回空字串
    return '';
}

取得 HTTP_HOST 並輸出

if (empty($HTTP_HOST)) {
    if (PMA_getenv('HTTP_HOST')) {
        $HTTP_HOST = PMA_getenv('HTTP_HOST');
    } else {
        $HTTP_HOST = '';
    }
}

// 使用 htmlspecialchars 防止 XSS
echo htmlspecialchars($HTTP_HOST);

適用場景

  • 跨平台部署的開源專案(如 phpMyAdmin)
  • 需在 CLI、CGI、模組模式下均能正常運行的腳本
  • 舊版 PHP 環境相容性處理

現代簡寫建議 (PHP 5.4+)

若僅需支援現代環境,可簡化為:

$host = $_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME'] ?? '';
echo htmlspecialchars($host);

注意:SERVER_NAME 需在 Apache 設定 UseCanonicalName On 時可靠;反向代理下建議優先信任 HTTP_X_FORWARDED_HOST(需驗證來源)。

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