(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
. Чтобы сузить круг поиска, можно задать необязательный параметр type
. Этот параметр может принимать следующие значения: DNS_A
, DNS_CNAME
, DNS_HINFO
, DNS_CAA
, DNS_MX
, DNS_NS
, DNS_PTR
, DNS_SOA
, DNS_TXT
, DNS_AAAA
, DNS_SRV
, DNS_NAPTR
, DNS_A6
, DNS_ALL
или DNS_ANY
.
Замечание:
Из-за неоднозначного поведения libresolv на разных платформах,
DNS_ANY
может вернуть не все записи, более медленныйDNS_ALL
вернёт все записи надёжнее.
Замечание:
Windows:
DNS_CAA
не поддерживается. ПоддержкаDNS_A6
не реализована.
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, обозначающее операционную систему компьютера, на который указывает эта запись. Смотрите дополнительно IANA » Operating System Names . |
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_get_record() с DNS_ANY
Так как довольно часто требуется определить IP-адрес почтового сервера, после того как запись MX была разрешена, dns_get_record() возвращает массив additional_records
с соответствующими записями. Массив authoritative_name_servers
будет содержать список удостоверяющих DNS-серверов.
<?php
$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 ) )