(PHP 5, PHP 7, PHP 8)
dns_get_record — Получает DNS-записи хоста
$hostname,$type = DNS_ANY,&$authoritative_name_servers = null,&$additional_records = null,$raw = 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, если возникла ошибка.
Каждый ассоциативный массив содержит
по меньшей мере следующие ключи:
| Атрибут | Описание |
|---|---|
| host | Запись в пространстве имён DNS, к которой относятся остальные связанные данные. |
| class |
Функция dns_get_record() возвращает только записи класса
Internet, поэтому этот параметр возвращает только записи класса
IN.
|
| type | Строка, которая содержит тип записи. Дополнительные атрибуты тоже будут содержаться в результирующем массиве в зависимости от значения типа. Смотрите таблицу ниже. |
| ttl |
Атрибут "Time To Live" содержит значение времени жизни, которое осталось для записи.
Это значение не совпадёт с исходным ttl-значением записи.
Значение атрибута равно исходному времени жизни за вычетом времени,
которое прошло с момента отправки запроса на сервер.
|
| Тип записи | Дополнительные данные |
|---|---|
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
)
)