checkdnsrr

(PHP 4, PHP 5, PHP 7, PHP 8)

checkdnsrrComprueba registros DNS correspondientes a un nombre de host de Internet dado o dirección IP

Descripción

checkdnsrr(string $host, string $type = "MX"): bool

Busca DNS de registros de tipo type que corresponde a un host.

Parámetros

host

host puede ser la dirección IP en notación decimal con puntos o el nombre de host.

type

type puede ser cualquiera de: A, MX, NS, SOA, PTR, CNAME, AAAA, A6, SRV, NAPTR, TXT o ANY.

Valores devueltos

Devuelve true si los registros se encuentran; devuelve false si no se encuentran registros o si ocurre un error.

Historial de cambios

Versión Descripción
5.3.0 Esta función está disponible en plataformas Windows.
5.2.4 Se añadió el type TXT.

Notas

Nota:

Por razones de compatibilidad con Windows antes de que esto fuera implementado, se puede intentar con la clase » Net_DNS de » PEAR.

Ver también

  • dns_get_record() - Fetch DNS Resource Records associated with a hostname
  • getmxrr() - Obtener los registros MX correspondientes a un nombre de host de Internet
  • gethostbyaddr() - Obtener el nombre del host de Internet correspondiente a una dirección IP dada
  • gethostbyname() - Obtener la dirección IPv4 que corresponde a un nombre de host de Internet dado
  • gethostbynamel() - Obtener una lista de direcciones IPv4 que corresponde a un nombre de host de Internet dado
  • the named(8) manual page

add a note add a note

User Contributed Notes 6 notes

up
31
Krisztin Ferenczi
11 years ago
criffoh at gmail dot com is right. Before you check domain, you must convert to ascii with idn_to_ascii function:
http://us2.php.net/manual/en/function.idn-to-ascii.php .

var_dump(checkdnsrr('ñandu.cl', 'A')); // returns false
var_dump(checkdnsrr(idn_to_ascii('ñandu.cl'), 'A')); // return true
up
8
Martin
8 years ago
Important Warning:

You need to add a dot to the end of the host name to make a fully qualified domain name.

To see why, try executing the following pieces of code:

$d1="gmail.con";
$d2="gmail.con.";
$r1=checkdnsrr($d1, "MX");
$r2=checkdnsrr($d2, "MX");
var_dump($r1);
var_dump($r2);

You will see that without the dot it claims that the domain "gmail.con" is valid.

Note that if you time the "checkdnsrr()" calls you will also see it takes longer without the dot because it treats it as a relative domain and does several tries based on the host name it is running on.

NB: in case you're interested, being treated as a relative domain explains what is happening. If your host is "example.com" the relative domain will eventually resolve to "gmail.con.com." which can be looked up, hence it wrongly claims "gmail.con" exists
up
3
Patrick
20 years ago
This is a little code example that will validate an email address in two ways:
- first the general syntax of the string is checked with a regular expression
- then the domain substring (after the '@') is checked using the 'checkdnsrr' function

<?php

function validate_email($email){

  
$exp = "^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";

   if(
eregi($exp,$email)){

      if(
checkdnsrr(array_pop(explode("@",$email)),"MX")){
        return
true;
      }else{
        return
false;
      }

   }else{

      return
false;

   }   
}

?>
up
0
n at zay dot uk
3 years ago
I always think you should state the blindingly obvious.
A function that contains checkdnsrr will return false without an internet connection.
So in a production environment you need an active internet connection to return a true result with a valid email address.
up
-5
criffoh at gmail dot com
11 years ago
Is not possible validate domains with 'ñ' for my country.

In my country is possible to register domain using 'ñ' character. For example:

ñandu.cl
http://nic.cl/cgi-bin/dom-CL?q=%F1andu

If I use this function to check DNS record, it return false, but the domain already exists:

var_dump(checkdnsrr('ñandu.cl', 'A')); // returns false
up
-9
dobs
6 years ago
$this->_buf - for bulk check cache

function ValidateEmail($email)
    {
        list($user, $domain) = explode('@', $email);

        if (!filter_var($email, FILTER_VALIDATE_EMAIL) !== FALSE)
            return 0;

        if (isset($this->_buf[$domain]))
            return $this->_buf[$domain];

        if (checkdnsrr($domain) === FALSE) {
            $this->_buf[$domain] = 0;
            return 0;
        }
        $this->_buf[$domain] = 1;

        return 1;
    }
To Top