PHP: противоречивые результаты для gethostbyname() и checkdnsrr()

Я пишу простую форму, чтобы проверить, доступен ли домен .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>';
            }
}

person Nick5a1    schedule 04.06.2012    source источник
comment
Почему вы используете @ для вызова dns_get_record()?   -  person zerkms    schedule 05.06.2012
comment
Я следую совету и коду @ w-shadow.com/blog/2011/01/04/   -  person Nick5a1    schedule 05.06.2012
comment
никогда не используйте его, пока не будете уверены, для чего он нужен   -  person zerkms    schedule 05.06.2012
comment
Итак, я удалил @, но изменений нет, и я понимаю, что делает каждая функция, но я все еще получаю несоответствия и не понимаю.   -  person Nick5a1    schedule 05.06.2012
comment
@ Nick5a1 Из руководства по PHP на dns_get_record: 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 обычно не слишком надежны.   -  person drew010    schedule 05.06.2012


Ответы (1)


Я не уверен, что использование какой-либо из этих функций (в основном использование DNS в целом) является надежным методом определения доступности домена.

У меня много зарегистрированных доменов, у которых нет абсолютно никаких DNS-записей, поэтому они не могут быть разрешены никакими средствами, но домены, конечно, заняты.

Хотя большинство доменов будут иметь некоторые записи DNS, бывают случаи, когда их нет. Например домен mymoney.com в вашем скрипте говорит, что доступен через все 3 проверки, но домен зарегистрирован.

Лучше всего использовать WHOIS для запроса соответствующего регистратора для данного TLD и использовать WHOIS для определения доступность. Я думаю, если вы попытаетесь использовать DNS, будут ложные срабатывания или другие проблемы, с которыми вы столкнетесь.

person drew010    schedule 04.06.2012