dns_get_record
(PHP 5, PHP 7)
dns_get_record — Получение ресурсных записей DNS хоста
Описание
$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
. Чтобы сузить круг поиска, можно задать необязательный параметр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
вернет все записи надежнее.Замечание:
DNS_CAA
не поддерживается в Windows. -
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 (PHP >= 5.1.0) |
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
/* Отправим "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 ) )