PHP checkdnsrr()函数没有给出期望结果

时间:2012-05-17 19:25:17

标签: php function

我在PHP中尝试使用checkdnsrr()函数来测试给定的主机名是否有效。

以下是PHP代码:

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

但即使对于无效的网址,它也会返回true。

我做错了什么?我使用的是PHP 5.3.5

编辑:此代码在具有相同PHP版本的Linux计算机上运行良好。它仅在Windows机器上提供无效结果。

4 个答案:

答案 0 :(得分:6)

某些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')))

答案 1 :(得分: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 :)。

答案 2 :(得分:0)

试试这个

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

所以括号中的$url

答案 3 :(得分:-2)

我在这里找到了:

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

更新日志

版本说明

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

5.2.4添加了TXT类型。

5.0.0增加了AAAA类型。

这意味着你无法在php< 5.3在Windows上