(PHP 5, PHP 7)
dns_get_record — Получение DNS свойств и характеристик хоста
$hostname
[, int $type
= DNS_ANY
[, array &$authns
[, array &$addtl
[, bool $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_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 записи, лучше воспользоваться более надежным, хоть и медленным, значениемDNS_ALL
,
authns
Передается по ссылке. Если массив задан, он будет заполняться ресурсными записями для Авторитетного сервера имен.
addtl
Передается по ссылке. Если задан, будет заполняться Дополнительными записями.
raw
В raw режиме запрашиваются только требуемый тип вместо перебора всех типов до тех пор пока не будет получена дополнительная информация.
Эта функция возвращает массив ассоциативных массивов,
или 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. |
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.
|
Версия | Описание |
---|---|
5.4.0 |
Добавлен параметр raw .
|
5.3.0 | Функция стала доступна на Windows платформах. |
5.3.0 |
До этого выпуска, если был задан параметр authns ,
то и addtl также становился обязательным. Теперь
нет.
|
Пример #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 адрес почтового сервера,
в указанном домене, dns_get_record() возвращает массив
addtl
с соответствующими записями. Массив
authns
будет содержать список авторитетных 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 ) )