checkdnsrr始终返回True

时间:2014-03-04 18:56:40

标签: php dns

我正在尝试为我正在构建的服务执行一些DNS ping。

其中一项服务是检查传递的URL的CNAME& /或A记录,并返回布尔值

虽然它似乎适用于有效的URL,但对于无效(并且我已经检查过),它仍然返回TRUE

代码

    // Check DNS records
    private function DoDNSCheck($url){
        $url = $this->GetHost($url);
        echo '<pre>';
        $tr = dns_get_record($url, DNS_A + DNS_CNAME);
        print_r($tr);
        echo '</pre>';
        return (bool)(checkdnsrr($url, "CNAME") || checkdnsrr($url, "A"));  
    }
    private function GetHost($url){
        try{
            $parseUrl = parse_url(trim($url)); 
            return trim($parseUrl['host']);
        } catch(Exception $e) {
            var_dump($e->getMessage());
        }
    }

我做错了什么?

P.S。我的服务器DNS设置是从我的路由器中检索的,该路由器使用我的ISP的DNS服务器。即使我尝试使用Google和OpenDNS

,这个问题仍然会发生

我甚至从dns_get_record支票

获得有效回复

通过上述功能,我得到了:

Array
(
[0] => Array
    (
        [host] => www.sadfsdffoijoiuyiuoinsdf.com
        [class] => IN
        [ttl] => 10
        [type] => A
        [ip] => 69.16.143.25
    )

[1] => Array
    (
        [host] => www.sadfsdffoijoiuyiuoinsdf.com
        [class] => IN
        [ttl] => 10
        [type] => A
        [ip] => 198.105.251.24
    )

)

bool(true)

从测试DoDNSCheck('http://www.sadfsdffoijoiuyiuoinsdf.com');

返回

1 个答案:

答案 0 :(得分:0)

这一行错了:

$Address = ((strpos($URL, "http://") !== false) || (strpos($URL, "https://") !== false)) ? 'http://' . $Address :  $Address;

您使用的是错误的变量$URL,逻辑是向后的。它应该是: