bool checkdnsrr ( string $host [, string $type ] )
(PHP 4, PHP 5)
Dns 서버에는 호스트에 대한 정보, 다양한 리소스 레코드를 저장하고 있어서 checkdnsrr 함수로 레코드 여부를 판단할 수 있습니다. 레코드 값이 존재하면 true를, 없으면 false를 반환합니다.
리소스 레코드 | 설 명 |
---|
A | 호스트의 32비트 ipv4 주소 |
---|
CNAME | 호스트의 엘리어스 이름 |
---|
MX | 메일교환기 (도메인의 메일전송 담당호스트: mail exchanger) |
---|
NS | 하위 도메인에 대한 DNS 서버 |
---|
PTR | ip주소를 호스트 이름으로 매핑 |
---|
AAAA | 호스트의 64비트 ipv6 주소 (PHP 5에 추가) |
---|
이 함수는 부울형으로만 판단할 수 있으며, 리소스 레코드는 반환하지 않습니다. 레코드를 반환 값으로 하려면, dns_get_record 함수를 사용하여야 합니다.
다음 그림으로 리소스 레코드를 확인할 수 있습니다.
<?php
if (!function_exists('checkdnsrr') &&
(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')) {
function checkdnsrr($host, $type='MX') {
if (empty($host)) { return; }
$arr = array(
'A','MX','NS','SOA','PTR','CNAME','AAAA','A6','SRV',
'NAPTR','TXT','ANY'
);
if (!in_array(strtoupper($type),$arr)) { return; }
$hostname = escapeshellcmd($host);
exec('%SystemRoot%\System32\nslookup -type='.$type.' '.$hostname, $output);
foreach($output as $line){
if (preg_match('/^'.$hostname.'/',$line)) {
return true;
}
}
}
}
if(checkdnsrr('empal.com', 'MX') == true){
echo "이 도메인은 MX 레코드가 있습니다.";
} else {
echo "이 도메인은 MX 레코드가 없습니다.";
}
if(checkdnsrr('yahoo.co.kr', 'CNAME') == true){
echo "엘리어스 이름이 존재합니다.";
} else {
echo "엘리어스 이름이 존재하지 않습니다.";
}
if(checkdnsrr('test.dothome.co.kr', 'ANY') == true){
echo "실제 존재하는 도메인입니다.";
} else {
echo "존재하지 않는 도메인입니다.";
}
?>