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함수를 사용하여야 합니다.

다음 그림으로 리소스 레코드를 확인할 수 있습니다.


예제 (ex #1

 <?php
 
// 윈도우 환경이라면....
 
if (!function_exists('checkdnsrr') && 
           (strtoupper(substr(PHP_OS03)) === '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 
"존재하지 않는 도메인입니다."
;
 }
 
 
?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag

댓글을 달아 주세요