3

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

下面是PHP代码:

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

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

我究竟做错了什么?我正在使用 PHP 5.3.5

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

4

4 回答 4

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')))
于 2012-05-17T20:01:57.197 回答
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 的答案:)。

于 2014-02-10T07:52:05.310 回答
0

尝试这个

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

所以$url刹车

于 2012-05-17T19:36:33.870 回答
-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 下调用此函数

于 2012-09-14T14:42:01.037 回答