【问题标题】:PHP checkdnsrr() function not giving expect resultsPHP checkdnsrr()函数没有给出预期结果
【发布时间】:2012-05-17 19:25:17
【问题描述】:

我在 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 机器上给出无效结果。

【问题讨论】:

  • 我测试了你的代码,它对我来说似乎工作正常。 (运行 PHP 5.3.3)。也许是 PHP 之外的东西导致了这个?
  • @Chief17 是的,你是对的。我在另一个系统(运行 5.3.6)上对其进行了测试,它按预期工作。关于如何调试导致它在当前系统上无法正常工作的任何提示?
  • 在命令行中,尝试pinging / nslookuping 域名,看看会得到什么?

标签: php function


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    感谢@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:)。

    【讨论】:

      【解决方案3】:

      试试这个

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

      所以$url 在括号中

      【讨论】:

      • 我认为他的意思是if(checkdnsrr(($url),"A")。我看不出有任何理由可以使脚本正常工作。无意冒犯@aurel :)
      • @RepWhoringPeeHaa 是的 :) 这就是他想要的
      • @aurel k,但我仍然看不到它的作用:P
      • @RepWhoringPeeHaa 检查 url 是否已注册。因此,如果您使用 google.com,它会声明为 true。老实说,我从未使用过它,我只是看到他的代码缺少刹车
      • @aurel 我的意思是额外的大括号
      【解决方案4】:

      我在这里找到的:

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

      更新日志

      版本说明

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

      增加了5.2.4 TXT类型。

      添加了 5.0.0 AAAA 类型。

      这意味着你不能在windows上的php

      【讨论】:

      • OP说使用的版本是5.3.5
      猜你喜欢
      • 2012-05-01
      • 2021-03-17
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      相关资源
      最近更新 更多