현재 위치: > 최신 기사 목록> DNS_GET_RECORD 기능의 기본 사용법은 무엇입니까? PHP에서 DNS_GET_RECORD를 효율적으로 사용하는 방법은 무엇입니까?

DNS_GET_RECORD 기능의 기본 사용법은 무엇입니까? PHP에서 DNS_GET_RECORD를 효율적으로 사용하는 방법은 무엇입니까?

gitbox 2025-06-27

PHP에서 DNS_GET_RECORD () 함수는 지정된 도메인 이름에 대한 DNS 레코드 정보를 얻기위한 매우 실용적인 도구입니다. 이 기능은 개발자에게 DNS 서버에서 직접 레코드를 쿼리 할 수있는 기능을 제공하며 네트워크 진단, 메일 시스템 개발, 도메인 이름 도구 플랫폼 및 기타 시나리오에 널리 사용됩니다.

1. DNS_GET_RECORD의 기본 사용

dns_get_record () 의 함수 프로토 타입은 다음과 같습니다.

 <span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hostname</span></span><span> [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$type</span></span><span> = DNS_ANY [, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$authns</span></span><span> [, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$addtl</span></span><span> ]]] )
</span></span>
  • $ hostname : query to host 이름 (예 : example.com ).

  • $ 유형 : 쿼리의 DNS 레코드 유형. 일반적으로 사용되는 유형은 다음과 같습니다.

    • DNS_A : IPv4 주소

    • DNS_AAAA : IPv6 주소

    • DNS_MX : 메일 교환 레코드

    • DNS_CNAME : 별칭 레코드

    • DNS_TXT : 텍스트 레코드

    • DNS_NS : 도메인 이름 서버

    • DNS_SOA : 승인 대행사 기록 시작

    • DNS_ANY : 모든 유형의 레코드

  • $ authns (선택 사항) : 권위있는 이름 서버 정보를 반환합니다.

  • $ addtl (선택 사항) : 추가 레코드를 반환합니다.

예 1 : 레코드 쿼리

 <span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span>(</span><span><span class="hljs-string">"example.com"</span></span><span>, DNS_A);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$records</span></span><span>);
</span></span>

이 코드는 모든 레코드가 포함 된 배열을 반환하며 각 요소는 호스트 , 유형 , IP , TTL 등과 같은 필드를 포함하는 연관 배열입니다.

예제 2 : 쿼리 MX 레코드

 <span><span><span class="hljs-variable">$mxRecords</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span>(</span><span><span class="hljs-string">"example.com"</span></span><span>, DNS_MX);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$mxRecords</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$record</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Mail Server: <span class="hljs-subst">{$record['target']}</span></span></span><span>, Priority: </span><span><span class="hljs-subst">{$record['pri']}</span></span><span>\n";
}
</span></span>

2. DNS_GET_RECORD의 효율적인 사용을위한 팁

이 기능을보다 효율적으로 사용하려면 몇 가지 실용적인 팁과 제안이 있습니다.

1. 레코드 유형을 정의합니다

DNS_ANY를 사용하지 않으면 모든 유형의 레코드가 한 번에 요청되므로 추가 성능 오버 헤드가 발생할 수 있습니다. 실제로 사용하면 필요한 레코드 유형 만 쿼리해야합니다.

2. 캐시를 사용하여 중복 쿼리를 줄입니다

DNS_GET_RECORD ()는 결과를 캐시하지 않으며 통화가 호출 될 때마다 실제 DNS 쿼리가 실행됩니다. 응용 프로그램 수명주기 동안 동일한 도메인 이름을 반복적으로 쿼리 해야하는 경우 캐싱 메커니즘 (예 : APCU 또는 Memcached)과 함께 사용하는 것이 좋습니다.

 <span><span><span class="hljs-variable">$cacheKey</span></span><span> = </span><span><span class="hljs-string">'dns_a_example_com'</span></span><span>;
</span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">apcu_fetch</span></span><span>(</span><span><span class="hljs-variable">$cacheKey</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$records</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span>(</span><span><span class="hljs-string">"example.com"</span></span><span>, DNS_A);
    </span><span><span class="hljs-title function_ invoke__">apcu_store</span></span><span>(</span><span><span class="hljs-variable">$cacheKey</span></span><span>, </span><span><span class="hljs-variable">$records</span></span><span>, </span><span><span class="hljs-number">300</span></span><span>); </span><span><span class="hljs-comment">// 은닉처5분</span></span><span>
}
</span></span>

3. 오류 처리 및 결과 확인

DNS_GET_RECORD () 쿼리가 실패하면 거짓이 반환되므로 생산 환경에서는 항상 반환 값 검사를 수행해야합니다.

 <span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span>(</span><span><span class="hljs-string">"example.com"</span></span><span>, DNS_MX);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$records</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"DNS 쿼리가 실패했습니다"</span></span><span>);
    </span><span><span class="hljs-comment">// 귀하의 요구에 따라 폴백 메커니즘 또는 사용자 프롬프트를 수행 할 수 있습니다.</span></span><span>
}
</span></span>

4. 다양한 유형의 필드를 분석하십시오

다른 유형의 DNS 레코드 필드는 약간 다릅니다. 예를 들어, A 레코드에는 IP 필드가 있으며 MX 레코드에는 PRI대상이 있습니다. 이러한 데이터를 처리 할 때는 구조적 차이에주의를 기울여야합니다.

 <span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$records</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$record</span></span><span>) {
    </span><span><span class="hljs-keyword">switch</span></span><span> (</span><span><span class="hljs-variable">$record</span></span><span>[</span><span><span class="hljs-string">'type'</span></span><span>]) {
        </span><span><span class="hljs-keyword">case</span></span><span> </span><span><span class="hljs-string">'A'</span></span><span>:
            </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"IP: "</span></span><span> . </span><span><span class="hljs-variable">$record</span></span><span>[</span><span><span class="hljs-string">'ip'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
            </span><span><span class="hljs-keyword">break</span></span><span>;
        </span><span><span class="hljs-keyword">case</span></span><span> </span><span><span class="hljs-string">'MX'</span></span><span>:
            </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"MX: "</span></span><span> . </span><span><span class="hljs-variable">$record</span></span><span>[</span><span><span class="hljs-string">'target'</span></span><span>] . </span><span><span class="hljs-string">" (Priority: "</span></span><span> . </span><span><span class="hljs-variable">$record</span></span><span>[</span><span><span class="hljs-string">'pri'</span></span><span>] . </span><span><span class="hljs-string">")\n"</span></span><span>;
            </span><span><span class="hljs-keyword">break</span></span><span>;
    }
}
</span></span>

3. 요약

PHP의 DNS_GET_RECORD () 함수는 도메인 이름 해결 레코드에 직접 액세스하는 방법을 제공하며 동적 DNS 쿼리가 필요한 시나리오에 매우 적합합니다. 합리적으로 쿼리 유형을 설정하고 캐시 메커니즘을 추가하고 해상도 리턴 값을 구성 함으로써이 기능을 실제 애플리케이션에서보다 효율적이고 안전하게 사용할 수 있습니다. DNS 관련 기능을 개발할 때 DNS_GET_RECORD () 는 필수 도구입니다.