2012-05-17 33 views
3

我尝试在PHP checkdnsrr()函数来测试一个指定的主机名是否有效或无效。PHP checkdnsrr()函数的结果

下面是PHP代码:

$url = "this_is_a_wrong_url.com"; 
if (checkdnsrr($url, 'A')) 
{ 
    echo "Domain exists."; 
} 
else 
{ 
    echo "Domain doesnot exists."; 
} 

但它返回甚至无效的网址是真实的。

我在做什么错?我使用PHP 5.3.5

编辑:此代码工作在Linux机器上使用相同的PHP版本的罚款。它只在Windows机器上给出无效结果。

+0

我测试了你的代码,它似乎很适合我。 (运行PHP 5.3.3)。也许它是PHP以外的东西造成这种情况? – vimist

+0

@ Chief17是的,你是对的。我在另一个系统(运行5.3.6)上测试过它,它按预期工作。有关如何调试导致这不能在当前系统上正常工作的任何提示? – AnonGeek

+0

在命令行中,尝试'ping'ing /'nslookup'查看域名,看看你得到了什么? – vimist

回答

6

$url有些ISP会无效域重定向到自己的搜索服务器。 TimeWarner/RoadRunner就是这样一个ISP。您的代码工作正常,但您可能需要检查以确保它们不会解析到您的ISP的搜索服务器。首先使用gethostbyname来检查无效的域,然后使用它来检查。

if (checkdnsrr($url, 'A') && gethostbyname($url) != '204.232.137.207' && gethostbyname($url) !='66.152.109.110') 

或者更好的是

if(checkdnsrr($url,'A') && !in_array(gethostbyname($url),gethostbynamel('this_is_a_wrong_url.com'))) 
0

试试这个

$url = "this_is_a_wrong_url.com"; 
    if(checkdnsrr(($url),"A")) 
{ 
    echo "Domain exists."; 
} 
else 
{ 
    echo "Domain doesnot exists."; 
} 

所以brakets

+0

@MrSlayer感谢,编辑 – aurel

+0

它给语法错误 – AnonGeek

+0

@aurel咦?那是什么? http://php.net/manual/en/function.checkdnsrr.php – PeeHaa

-2

我发现这里:

http://php.net/manual/en/function.checkdnsrr.php

更新日志

版本说明

5.3.0此功能现在可在Windows平台上使用。加入

5.2.4 TXT类型。加入

5.0.0 AAAA类型。

这意味着你不能在Windows调用这个函数在PHP 5.3 <

+0

OP表示使用的版本是5.3.5 –

1

感谢@aynber的答案。它帮助我很多。但我认为这对我来说并不完整。我已经修改了一些你的答案来检查电子邮件域是否有效。实际上,它不适用于.co,.co.in,.in域名。所以,我扩大你的答案一点:)

$email = trim($_GET['email']); 

// take a given email address and split it into the username and domain. 
list($userName, $mailDomain) = split("@", $email); 
$tld = explode('.', $mailDomain,2)[1];//for php>=5.4.0 
if(checkdnsrr($mailDomain,'A') && !in_array(gethostbyname($mailDomain),gethostbynamel('this_is_a_wrong_url_xx_xx_xx.' . $tld))) { 
echo "Domain exists."; 
} else { 
echo "Domain not exists."; 
} 

@aynber,+1的答案:)。