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 "엘리어스 이름이 존재하지 않습니다.";
 }

 // ANY는 모든 리소스의 레코드를 확인합니다.
 // 무료 도메인을 사용하더라도 상위 도메인은 레코드가 있으므로 이 값은 true입니다.
 if(checkdnsrr('test.dothome.co.kr', 'ANY') == true){
      echo "실제 존재하는 도메인입니다.";
 } else {
      echo "존재하지 않는 도메인입니다.";
 }
 ?>

0 댓글