【问题标题】:PHP: inconsistent results for gethostbyname() and checkdnsrr()PHP:gethostbyname() 和 checkdnsrr() 的结果不一致
【发布时间】:2012-06-04 23:28:17
【问题描述】:

我正在编写一个简单的表单来检查 .com 域是否可用。我正在使用下面的代码为一堆测试域名评估 3 种方法(@dns_get_record、gethostbyname() 和 checkdnsrr()),但是我得到了 gethostbyname() 和 checkdnsrr() 的所有不可用条目,你可以如果您刷新几次,请参阅@http://suggestmyname.com/nonwp/arraypush.php。我在本地测试服务器上运行时没有遇到这个问题,有人知道为什么不一致吗?此外,并非所有域都在我的远程服务器上进行检查,而是在我的本地测试服务器上。

$sdomains = array();
array_push($sdomains, 'etc.com');

function domainAvailable1($domain){
$results = @dns_get_record($domain, DNS_ANY);
return empty($results);
}
function domainAvailable2($domain){
return gethostbyname($domain) == $domain;
}
function domainAvailable3($domain){
return !checkdnsrr($domain, 'ANY');
}

echo '<table><tr><td>@dns_get_record</td><td>gethostbyname</td><td>checkdnsrr</td></tr>';       

foreach($sdomains as $sdomain){
if (domainAvailable1($sdomain) == true){                    
            echo '<tr><td bgcolor=green>' . $sdomain . ' is available!</td>';
            } else {
            echo '<tr><td bgcolor=red>' . $sdomain . ' is NOT available.</td>';
            }
if (domainAvailable2($sdomain) == true){                    
            echo '<td bgcolor=green>' . $sdomain . ' is available!</td>';
            } else {
            echo '<td bgcolor=red>' . $sdomain . ' is NOT available.</td>';
            }
if (domainAvailable3($sdomain) == true){                    
            echo '<td bgcolor=green>' . $sdomain . ' is available!</td></tr>';
            } else {
            echo '<td bgcolor=red>' . $sdomain . ' is NOT available.</td></tr>';
            }
}

【问题讨论】:

  • 你为什么使用@ 来调用dns_get_record()
  • 我正在遵循建议和代码@w-shadow.com/blog/2011/01/04/…
  • 在确定它的用途之前不要使用它
  • 好的,我删除了@,但没有任何变化,而且我了解每个函数在做什么,但我仍然有不一致的地方,我不明白。
  • @Nick5a1 来自dns_get_record 上的PHP 手册:Because of eccentricities in the performance of libresolv between platforms, DNS_ANY will not always return every record, the slower DNS_ALL will collect all records more reliably. 这可能是您遇到的情况,但我不确定。从经验来看,ANY 查询通常不太可靠。

标签: php gethostbyname


【解决方案1】:

我不确定使用这些功能中的任何一个(基本上通常使用 DNS)是确定域是否可用的可靠方法。

我有很多注册的域名完全没有 DNS 记录,因此无法通过任何方式解析它们,但这些域名当然被占用了。

虽然大多数域都会有一些 DNS 记录,但在某些情况下却没有。例如,您的脚本中的域 mymoney.com 表示它可以通过所有 3 次检查,但该域已注册。

您最好使用 WHOIS 查询给定 TLD 的相应注册商,并使用 WHOIS 确定可用性。我认为如果您尝试使用 DNS,将会遇到误报或其他问题。

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 2014-09-21
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2021-03-27
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多