(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 ) )