In PHP ist die Funktion dns_get_record () ein sehr praktisches Instrument, um DNS -Datensatzinformationen für einen bestimmten Domänennamen zu erhalten. Diese Funktion bietet Entwicklern die Möglichkeit, Datensätze direkt vom DNS -Server abzufragen, und wird häufig in der Netzwerkdiagnose, der E -Mail -Systementwicklung, der Domainnamen -Tool -Plattform und anderen Szenarien verwendet.
Der Funktionsprototyp von dns_get_record () lautet wie folgt:
<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> &</span><span><span class="hljs-variable">$authns</span></span><span> [, </span><span><span class="hljs-keyword">array</span></span><span> &</span><span><span class="hljs-variable">$addtl</span></span><span> ]]] )
</span></span>
$ hostname : Der Hostname zur Abfrage (z. B. Beispiel.com ).
$ type : Der DNS -Datensatztyp für die Abfrage. Zu den häufig verwendeten Typen gehören:
DNS_A : IPv4 -Adresse
DNS_AAAA : IPv6 -Adresse
DNS_MX : Mail Exchange -Datensatz
DNS_CNAME : Alias -Datensatz
DNS_TXT : Textrekord
DNS_NS : Domänenname -Server
DNS_SOA : Aufzeichnung der Autorisierungsagentur starten
DNS_ANY : Alle Arten von Datensätzen
$ authns (optional): Gibt autoritative Namenserverinformationen zurück.
$ addtl (optional): Gibt zusätzliche Datensätze zurück.
<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>
Dieser Code gibt ein Array mit allen Datensätzen zurück. Jedes Element ist ein assoziatives Array mit Feldern wie Host , Typ , IP , TTL usw.
<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>
Um diese Funktion effizienter zu verwenden, gibt es mehrere praktische Tipps und Vorschläge:
Vermeiden Sie die Verwendung von DNS_ANY , da dies alle Arten von Datensätzen gleichzeitig anfordert, was möglicherweise zusätzliche Leistungsaufwand erscheint. Im tatsächlichen Gebrauch sollte nur der erforderliche Datensatztyp abgefragt werden.
DNS_Get_Record () wird die Ergebnisse nicht zwischenspeichert, und jedes Mal, wenn der Anruf aufgerufen wird, wird eine echte DNS -Abfrage ausgeführt. Wenn Sie während eines Anwendungslebenszyklus wiederholt denselben Domänennamen abfragen müssen, wird empfohlen, ihn in Verbindung mit einem Caching -Mechanismus (wie APCU oder Memcached) zu verwenden:
<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">// Cache5Minute</span></span><span>
}
</span></span>
False wird zurückgegeben, wenn die Abfrage dns_get_record () fehlschlägt.
<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 Abfrage fehlgeschlagen"</span></span><span>);
</span><span><span class="hljs-comment">// Sie können einen Fallback -Mechanismus oder Benutzeranforderungen entsprechend Ihren Anforderungen durchführen</span></span><span>
}
</span></span>
Verschiedene Arten von DNS -Datensatzfeldern sind geringfügig unterschiedlich. Zum Beispiel gibt es ein IP -Feld im A -Datensatz, während es im MX -Datensatz PRI und Ziel gibt. Bei der Verarbeitung dieser Daten sollten Sie auf strukturelle Unterschiede achten:
<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>
Die Funktion DNS_Get_Record () von PHP bietet eine Möglichkeit, direkt auf Domain -Namensauflösungsdatensätze zuzugreifen, die für Szenarien sehr geeignet sind, in denen dynamische DNS -Abfragen erforderlich sind. Durch rationales Festlegen des Abfragetyps, des Hinzufügens eines Cache -Mechanismus und der Strukturierung des Auflösungsrückgabewerts kann diese Funktion in tatsächlichen Anwendungen effizienter und sicherer verwendet werden. Bei der Entwicklung von DNS-bezogenen Funktionen ist DNS_Get_Record () ein unverzichtbares Werkzeug.