Получает DNS-записи хоста

# dns_get_record

(PHP 5, PHP 7, PHP 8)

dns_get_record — Получает DNS-записи хоста

### Описание

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

Функция выбирает DNS-записи, которые соответствуют свойствам хоста `hostname`.

### Список параметров

`hostname`

  Параметр `hostname` принимает допустимые значения DNS-имён наподобие `www.example.com`. Обратное разрешение имён хостов выполняют в нотации `in-addr.arpa`, но для этой цели лучше пользоваться функцией gethostbyaddr().

  > Замечание:

  > По DNS-стандартам адреса электронной почты указывают в формате `user.host`, поэтому вместо `hostmaster@example.com`) передают `hostmaster.example.com`. Обязательно проверьте значение и если потребуется измените адрес, прежде чем передавать его в функции наподобие mail().

`type`

  По умолчанию функция dns_get_record() будет искать любые записи ресурсов, которые связаны именем хоста `hostname`. Константы семейства `DNS_*` помогают сузить запрос.

`authoritative_name_servers`

  Аргумент передаётся по ссылке и при передаче заполняется ресурсными записями для удостоверяющих серверов имён (Authoritative Name Servers).

`additional_records`

  Передаётся по ссылке и, если передан, будет заполняться дополнительными записями (Additional Records).

`raw`

  Функция интерпретирует параметр `type` как необработанный идентификатор типа DNS; в параметр нельзя передавать константы семейства `DNS_*`. Значение возврата будет содержать ключ `data`, который потребуется проанализировать вручную.

### Возвращаемые значения

Функция возвращает массив ассоциативных массивов или `false`, если возникла ошибка. Каждый ассоциативный массив содержит по меньшей мере следующие ключи:

Основные атрибуты DNS
Атрибут | Описание
--- | ---
host | Запись в пространстве имён DNS, к которой относятся остальные связанные данные.
class | Функция dns_get_record() возвращает только записи класса Internet, поэтому этот параметр возвращает только записи класса `IN`.
type | Строка, которая содержит тип записи. Дополнительные атрибуты тоже будут содержаться в результирующем массиве в зависимости от значения типа. Смотрите таблицу ниже.
ttl | Атрибут `"Time To Live"` содержит значение времени жизни, которое осталось для записи. Это значение не совпадёт с исходным ttl-значением записи. Значение атрибута равно исходному времени жизни за вычетом времени, которое прошло с момента отправки запроса на сервер.

Другие ключи в ассоциативных массивах, которые зависят от значения параметра `type`
Тип записи | Дополнительные данные
--- | ---
`A` | `ip`: адреса IPv4 в десятичном формате с разделителями точками.
`MX` | `pri`: Приоритет почтового сервера. Чем ниже число, тем выше приоритет. `target`: FQDN почтового сервера. Смотрите также dns_get_mx().
`CNAME` | `target`: FQDN-имя места расположения в пространстве имён DNS, на которое указывает запись.
`NS` | `target`: FQDN-имя авторитетного для имени хоста сервера имён.
`PTR` | `target`: Расположение без указания пространства имён DNS, на которое указывает запись.
`TXT` | `txt`: Строка данных, которые связаны с записью.
`HINFO` | `cpu`: число IANA, которое обозначает модель процессора компьютера, на который указывает запись. `os`: число IANA, которое обозначает операционную систему компьютера, на который указывает запись. Смотрите дополнительно реестр названий операционных систем » `Operating System Names` администрации адресного интернет-пространства IANA.
`CAA` | `flags`: Однобайтовое битовое поле; пока определили только бит с номером 0, который называется 'critical'; другие биты зарезервировали и игнорируются. `tag`: Имя тега CAA (буквенно-числовая строка ASCII). `value`: Значение тега CAA (бинарная строка, допускаются подформаты). Дополнительную информацию даёт стандарт » RFC 6844.
`SOA` | `mname`: FQDN-имя изначального компьютера, с которого получены ресурсные записи. `rname`: Адрес электронной почты администратора домена. `serial`: Порядковый номер этой ревизии запрашиваемого домена. `refresh`: Интервал времени в секундах, который должны использовать вторичные серверы при обновлении удалённых копий этого домена. `retry`: Время ожидания в секундах после неудачного обновления до следующей попытки. `expire`: Максимальное время в секундах, в течение которого вторичный DNS-сервер должен держать в памяти данные удалённых копий доменной зоны, прежде чем ответить отказом, когда не удаётся обновить данные. `minimum-ttl`: Минимальное время в секундах, в течение которого клиент может работать с текущим DNS-разрешением, прежде чем ему придётся повторно запрашивать это разрешение. Значение иногда замещается отдельными ресурсными записями.
`AAAA` | `ipv6`: IPv6-адрес
`A6` | `masklen`: Длина в битах, которую нужно унаследовать от целевого адреса `chain`. `ipv6`: Адрес для этой конкретной записи, который нужно объединить с `chain`. `chain`: Запись, которую нужно дополнить данными `ipv6`.
`SRV` | `pri`: (Приоритет) меньшие значения должны использоваться первыми. `weight`: Ранжирование. Записям с большим весом отдаётся предпочтение. `targets` должен выбираться случайно. `target` и `port`: имя хоста и номер порта, на котором можно найти запрошенную службу. Дополнительную информацию даёт стандарт » RFC 2782
`NAPTR` | `order` и `pref`: Значения эквивалентны приведённым столбцам `pri` и `weight`. Столбцы `flags`, `services`, `regex` и `replacement`: Параметры, которые определили в стандарте » RFC 2915.

### Список изменений

Версия | Описание
--- | ---
7.0.16, 7.1.2 | Добавили поддержку записей типа CAA.

### Примеры

Пример #1 Пример получения записей функцией dns_get_record()

    <?php

    $result = dns_get_record("php.net");
    print_r($result);

    ?>

Вывод приведённого примера будет похож на:

    Array
    (
        [0] => Array
            (
                [host] => php.net
                [type] => MX
                [pri] => 5
                [target] => pair2.php.net
                [class] => IN
                [ttl] => 6765
            )

        [1] => Array
            (
                [host] => php.net
                [type] => A
                [ip] => 64.246.30.37
                [class] => IN
                [ttl] => 8125
            )

    )

Пример #2 Пример получения записей с типом DNS_ANY функцией dns_get_record()

Поскольку часто требуется определить IP-адрес почтового сервера, после разрешения MX-записи функция dns_get_record() возвращает массив `additional_records` с записями, которые соответствуют серверам. Массив `authoritative_name_servers` будет содержать список удостоверяющих DNS-серверов.

    <?php
    /* Запросим запись с типом "ANY" для хоста php.net,
       создадим массивы $authns и $addtl,
       в которые функция поместит список серверов
       имён и дополнительные записи,
       которые соответствуют этим серверам
    */
    $result = dns_get_record("php.net", DNS_ANY, $authns, $addtl);
    echo "Результат = ";
    print_r($result);
    echo "Удостоверяющие серверы = ";
    print_r($authns);
    echo "Дополнительные записи = ";
    print_r($addtl);

    ?>

Вывод приведённого примера будет похож на:

    Результат = Array
    (
        [0] => Array
            (
                [host] => php.net
                [type] => MX
                [pri] => 5
                [target] => pair2.php.net
                [class] => IN
                [ttl] => 6765
            )

        [1] => Array
            (
                [host] => php.net
                [type] => A
                [ip] => 64.246.30.37
                [class] => IN
                [ttl] => 8125
            )

    )
    Удостоверяющие серверы = Array
    (
        [0] => Array
            (
                [host] => php.net
                [type] => NS
                [target] => remote1.easydns.com
                [class] => IN
                [ttl] => 10722
            )

        [1] => Array
            (
                [host] => php.net
                [type] => NS
                [target] => remote2.easydns.com
                [class] => IN
                [ttl] => 10722
            )

        [2] => Array
            (
                [host] => php.net
                [type] => NS
                [target] => ns1.easydns.com
                [class] => IN
                [ttl] => 10722
            )

        [3] => Array
            (
                [host] => php.net
                [type] => NS
                [target] => ns2.easydns.com
                [class] => IN
                [ttl] => 10722
            )

    )
    Дополнительные записи = Array
    (
        [0] => Array
            (
                [host] => pair2.php.net
                [type] => A
                [ip] => 216.92.131.5
                [class] => IN
                [ttl] => 6766
            )

        [1] => Array
            (
                [host] => remote1.easydns.com
                [type] => A
                [ip] => 64.39.29.212
                [class] => IN
                [ttl] => 100384
            )

        [2] => Array
            (
                [host] => remote2.easydns.com
                [type] => A
                [ip] => 212.100.224.80
                [class] => IN
                [ttl] => 81241
            )

        [3] => Array
            (
                [host] => ns1.easydns.com
                [type] => A
                [ip] => 216.220.40.243
                [class] => IN
                [ttl] => 81241
            )

        [4] => Array
            (
                [host] => ns2.easydns.com
                [type] => A
                [ip] => 216.220.40.244
                [class] => IN
                [ttl] => 81241
            )

    )

### Смотрите также

- dns_get_mx() - Псевдоним getmxrr
- dns_check_record() - Псевдоним checkdnsrr

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open