現在の位置: ホーム> 最新記事一覧> 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 :ホスト名クエリ(例: 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>

このコードは、すべてのレコードを含む配列を返します。各要素は、ホストタイプIPTTLなどのフィールドを含む連想配列です。

例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() queryが失敗するとfalseが返されます。したがって、戻り値チェックは、生産環境で常に実行する必要があります。

 <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()は不可欠なツールです。