2013-07-09 28 views
1

這是iam使用gethostbyname()驗證域名的代碼。gethostbyname()在域驗證時顯示更奇怪的結果

這工作正常,直到我在本地主機上使用它。

只要我將它上傳到我的服務器上,gethostbyname()就開始返回未知域名的IP地址。

$url=$_GET['d']; 
function getHost($Address) { 
      $parseUrl = parse_url(trim($Address)); 
      return trim($parseUrl['host'] ? $parseUrl['host'] : array_shift(explode('/', $parseUrl['path'], 2))); 
     } 

    $get=getHost($url); 
    $domain = str_ireplace('www.', '', $get); 

if(filter_var(gethostbyname($domain), FILTER_VALIDATE_IP)) 
{ 
echo gethostbyname($domain); 
echo $domain; 
} 
else 
{ 
echo gethostbyname($domain); 
    echo "Not Valid"; 
} 

我的測試情況是: -

1)WWW-它返回184.173.134.234

2)google.coma-返回67.215.65.132

3)google.comaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - 它返回67.215.65.132

一個更有趣的事情發生的是,當我在我的本地主機上運行它們時,這些相同的域名。函數返回無效。

任何幫助,將不勝感激:)

回答

2

基於由本·d的答案,研究...

# Get the URL from the GET Parameters 
$url = $_GET['d']; 

# Derive the HTTP Host 
$hostname = parse_url($url , PHP_URL_HOST); 
# Strip the "WWW." from the hostname if present 
$hostname = preg_replace('/^www\./i' , '' , $hostname); 

# Look for the IP Address 
$ip_address = gethostbyname($hostname); 

if(filter_var($hostname , FILTER_VALIDATE_IP)){ 
    echo 'Hostname is an IP Address already'; 
    echo $hostname; 
}elseif($ip_address==$hostname || $ip_address=='67.215.65.132'){ 
    echo 'Domain Not Found'; 
}elseif(filter_var($ip_address , FILTER_VALIDATE_IP)){ 
    echo $ip_address; 
    echo $hostname; 
}else{ 
    echo 'Invalid IP Address Returned'; 
    echo $ip_address; 
    echo $hostname; 
} 
+0

感謝@Lucanos爲你的幫助..它的工作,我現在清楚瞭解這個概念...再次感謝:) –

1

67.215.65.132是一個「不可用」重定向使用,我相信,通過OpenDNS的:

IP + HOSTNAME INFORMATION 
IP: 67.215.66.132 Hostname:hit-servfail.opendns.com 
Active Servers: http/80 https/443 LOCATION 

你的DNS服務試圖查找無效域,找不到任何東西,因此它會嘗試將您重定向到默認的「不可用」IP地址......如果這是一個自託管項目,請嘗試切換您的DNS服務。

+0

感謝您的回答,但我的是共享服務器。所以有什麼辦法。 –

+0

@ rsdev8:嘗試並假設返回值「67.215.65.132」與「gethostbyname()」函數失敗相同。 –

+0

謝謝@Ben D ..for你help..appreciate它:) –