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

PHP 獲取域名的多種方法總結與實戰技巧

     編輯:PHP 相關知識

PHP 獲取域名的多種方法總結與實戰技巧

在 PHP 開發中,獲取當前域名或解析 URL 中的域名是常見需求。本文整理了四種主流方法,並補充獲取域名對應 IP 與來路域名的實用技巧,助你靈活應對不同場景。

方法一:使用 $_SERVER 超全局變數

最直接的方式是讀取 $_SERVER['HTTP_HOST'],可獲取當前請求的主機名(包含端口號)。但需注意:若代理服務器未正確傳遞 Host 標頭,或 PHP 運行環境不支持該變數,可能導致結果不可靠。

echo $_SERVER['HTTP_HOST'];

方法二:利用 parse_url() 內建函數解析 URL

針對完整 URL 字串,parse_url() 能將其拆解為關聯陣列,直接取 host 鍵值即可。此法適用於已知完整 URL 的情況,且能自動處理協議、埠口、路徑等元件。

$url = 'https://www.example.com/index.php?referer=test.com';
$arr_url = parse_url($url);
echo $arr_url['host']; // 輸出 www.example.com

方法三:自定義函數移除協議與路徑

若不想依賴內建函數,可自行編寫邏輯:先移除 https:// 前綴,再尋找第一個 / 位置截取前段字串。此法直觀易懂,但需自行處理 HTTPS、無協議等邊界情況。

function getDomain($url) {
    $url = str_replace('https://', '', $url);
    $pos = strpos($url, '/');
    return ($pos === false) ? $url : substr($url, 0, $pos);
}
echo getDomain($url);

方法四:正則表達式提取

使用 preg_match() 配合模式 /^(http:\/\/)?([^\/]+)/i 可直接捕獲域名部分。正則雖強大,但寫法較繁瑣,且需注意轉義與效能。

preg_match("/^(http:\/\/)?([^\/]+)/i", $url, $arr_domain);
echo $arr_domain[2];

進階應用:獲取域名對應的 IP 位址

PHP 內建 gethostbyname() 函數可將主機名解析為 IPv4 位址:

$ip = gethostbyname('www.example.com');
echo $ip; // 如 93.184.216.34

注意:若域名解析失敗,函數將返回原主機名字串,建議搭配 filter_var($ip, FILTER_VALIDATE_IP) 驗證結果。

實戰技巧:精確獲取來路域名

許多開發者誤用 $_SERVER['SERVER_NAME'](此為伺服器自身域名)。正確做法是解析 HTTP_REFERER:

$url = $_SERVER["HTTP_REFERER"];          // 取得完整來路 URL
$str = str_replace("https://", "", $url);   // 移除協議
$strdomain = explode("/", $str);           // 以 "/" 分割
$domain = $strdomain[0];                   // 取第一段即為域名

此法能準確獲取訪客來源網站域名,適合統計分析、防盜鏈等場景。

總結建議

  • 單純獲取當前域名:首選 $_SERVER['HTTP_HOST'],兼容性最佳。
  • 解析任意 URL 字串:parse_url() 最標準、健壯。
  • 特殊格式或無法使用內建函數時:自定義函數或正則備用。
  • 涉及 DNS 解析或來源追蹤時,善用 gethostbyname() 與 HTTP_REFERER 解析。

掌握這些方法,能讓你在 PHP 專案中靈活、準確地處理域名相關邏輯。

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