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

PHP 獲取當前 URL 路徑與服務器變量完整速查表

     編輯:PHP 相關知識

開發中頻繁需要獲取當前腳本路徑、項目根目錄、域名等信息。PHP 通過 $_SERVER 超全局數組與魔術常量提供豐富信息,但各變量含義易混淆。本文整理最常用變量、輸出示例與實戰取舍建議。

核心變量對照表

變量/常量含義示例輸出注意事項
$_SERVER['DOCUMENT_ROOT']Web 服務器文檔根目錄(Apache DocumentRoot)/usr/opt/apache2/htdocs/受 httpd.conf 配置影響,符號鏈接可能不解析
$_SERVER['PHP_SELF']當前腳本相對文檔根目錄的路徑/alias/aa.php包含查詢字符串時需配合 $_SERVER['REQUEST_URI']
__FILE__當前文件的絕對文件系統路徑(含文件名)/usr/opt/apache2/htdocs/kamap/aa.php魔術常量,編譯時解析,包含符號鏈接真實路徑
dirname(__FILE__)當前文件所在目錄絕對路徑/usr/opt/apache2/htdocs/kamap/PHP 5.3+ 推薦用 __DIR__
realpath($path)解析相對路徑為絕對路徑(去除 ..、符號鏈接)/usr/etc/abcd路徑必須存在,否則返回 false
$_SERVER['REQUEST_URI']請求的完整 URI(含查詢串)/alias/aa.php?id=1最直觀反映用戶訪問地址
$_SERVER['HTTP_HOST']請求頭 Host(域名:端口)example.com:8080反向代理下可能需看 X-Forwarded-Host
$_SERVER['HTTPS']是否 HTTPS(on/off 或 1/0)on反代下需判斷 X-Forwarded-Proto

實戰組合:構建完整 URL

<?php
function getCurrentFullUrl() {
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? 'https' : 'http';
    $host     = $_SERVER['HTTP_HOST'];
    $uri      = $_SERVER['REQUEST_URI'];
    return $protocol . '://' . $host . $uri;
}

function getBaseUrl() {
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? 'https' : 'http';
    return $protocol . '://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME']);
}
?>

常見場景取舍建議

  • 引入配置/核心文件:用 __DIR__ . '/config.php'(不受調用腳本位置影響)。
  • 生成頁面鏈接/表單 action:用 $_SERVER['REQUEST_URI'] 或 getBaseUrl()。
  • 判斷當前頁面高亮導航:解析 $_SERVER['REQUEST_URI'] 的 path 部分。
  • 安全檢查(防 CSRF/XSS):驗證 $_SERVER['HTTP_REFERER'] 或 HTTP_ORIGIN,但不可全信(可偽造)。

測試代碼:快速查看當前環境所有變量

<?php
echo '<pre>';
print_r($_SERVER);
echo '</pre>';
// 或僅查看關鍵項
$keys = ['DOCUMENT_ROOT', 'PHP_SELF', 'REQUEST_URI', 'SCRIPT_NAME', 'SCRIPT_FILENAME', 'HTTP_HOST', 'HTTPS', 'SERVER_PORT', 'QUERY_STRING'];
foreach ($keys as $k) {
    echo "$k = " . ($_SERVER[$k] ?? '未設置') . "<br>";
}
?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved