在 PHP 開發中,獲取當前域名或解析 URL 中的域名是常見需求。本文整理了四種主流方法,並補充獲取域名對應 IP 與來路域名的實用技巧,助你靈活應對不同場景。
最直接的方式是讀取 $_SERVER['HTTP_HOST'],可獲取當前請求的主機名(包含端口號)。但需注意:若代理服務器未正確傳遞 Host 標頭,或 PHP 運行環境不支持該變數,可能導致結果不可靠。
echo $_SERVER['HTTP_HOST'];
針對完整 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];
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'],兼容性最佳。parse_url() 最標準、健壯。gethostbyname() 與 HTTP_REFERER 解析。掌握這些方法,能讓你在 PHP 專案中靈活、準確地處理域名相關邏輯。