dns_get_record în PHP

Rețea PHP 5.0+

Citește înregistrările DNS ale unui domeniu: A, AAAA, MX, TXT, NS, CNAME și altele.

Sintaxă
dns_get_record(string $hostname, int $type = DNS_ANY, &$authoritative_name_servers = null, &$additional_records = null, bool $raw = false): array|false

Ce face dns_get_record

dns_get_record este funcția completă pentru DNS. Alegi tipul cu o constantă: DNS_A (IPv4), DNS_AAAA (IPv6), DNS_MX (servere de email), DNS_TXT (texte, de exemplu SPF sau verificări Google), DNS_NS, DNS_CNAME. Poți combina tipuri cu |.

Fiecare înregistrare este un tablou cu cheile host, class, ttl, type și cheile specifice tipului: ip pentru A, ipv6 pentru AAAA, pri și target pentru MX, txt pentru TXT.

Parametri

Parametru Descriere
$hostname Domeniul interogat.
$type Opțional. Tipul înregistrărilor, de exemplu DNS_MX. Implicit DNS_ANY, pe care multe servere DNS nu îl mai acceptă.
$authoritative_name_servers Opțional. Variabilă pentru serverele de nume autoritare.
$additional_records Opțional. Variabilă pentru înregistrările suplimentare.
$raw Opțional. true interoghează exact tipul dat, ca număr.

Ce returnează

Un tablou de înregistrări (gol dacă nu există niciuna) sau false la eroare.

Exemple

Exemplul 1: Adresele IPv4

<?php
foreach (dns_get_record("exemplu.ro", DNS_A) as $r) {
    echo $r["ip"] . " (TTL " . $r["ttl"] . " s)\n";
}

Rezultat posibil (depinde de DNS)

203.0.113.25 (TTL 3600 s)

Exemplul 2: Serverele de email, după prioritate

Prioritatea mai mică este încercată prima.

<?php
$mx = dns_get_record("exemplu.ro", DNS_MX);
usort($mx, fn($a, $b) => $a["pri"] <=> $b["pri"]);

foreach ($mx as $r) {
    echo $r["pri"] . " " . $r["target"] . "\n";
}

Rezultat posibil (depinde de DNS)

10 mx1.exemplu.ro
20 mx2.exemplu.ro

Exemplul 3: Există înregistrare SPF?

<?php
$txt = dns_get_record("exemplu.ro", DNS_TXT);
$spf = array_filter($txt, fn($r) => str_starts_with($r["txt"], "v=spf1"));

echo $spf ? "SPF: " . reset($spf)["txt"] : "Fără SPF";

Rezultat posibil (depinde de DNS)

SPF: v=spf1 include:_spf.exemplu.ro -all

Greșeli frecvente

  • Folosești tipul implicit DNS_ANY. Mulți furnizori DNS răspund incomplet sau deloc la această interogare. Cere tipul exact de care ai nevoie.
  • Citești $r["ip"] din toate înregistrările unei interogări combinate. Doar înregistrările de tip A au cheia ip; verifică $r["type"].

Comenzi înrudite

  • dns_check_record: Verifică dacă un domeniu are înregistrări DNS de un anumit tip (implicit MX, adică poate primi email).
  • dns_get_mx: Află serverele de email (înregistrările MX) ale unui domeniu și prioritățile lor.
  • gethostbyname: Află adresa IPv4 a unui domeniu, de exemplu adresa IP din spatele unui site.
  • gethostbynamel: Returnează toate adresele IPv4 ale unui domeniu, ca tablou.