<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.network.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'function.dns-get-record.php',
    1 => 'dns_get_record',
    2 => 'Получает DNS-записи хоста',
  ),
  'up' => 
  array (
    0 => 'ref.network.php',
    1 => 'Сетевые функции',
  ),
  'prev' => 
  array (
    0 => 'function.dns-get-mx.php',
    1 => 'dns_get_mx',
  ),
  'next' => 
  array (
    0 => 'function.fsockopen.php',
    1 => 'fsockopen',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/network/functions/dns-get-record.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.dns-get-record" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">dns_get_record</h1>
  <p class="verinfo">(PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">dns_get_record</span> &mdash; <span class="dc-title">
   Получает DNS-записи хоста
  </span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.dns-get-record-description">
  <h3 class="title">Описание</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>dns_get_record</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$hostname</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$type</code><span class="initializer"> = <strong><code><a href="network.constants.php#constant.dns-any">DNS_ANY</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter reference">&$authoritative_name_servers</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter reference">&$additional_records</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <code class="parameter">$raw</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></span></span><br>): <span class="type"><span class="type"><a href="language.types.array.php" class="type array">array</a></span>|<span class="type"><a href="language.types.singleton.php" class="type false">false</a></span></span></div>

  <p class="para rdfs-comment">
   Функция выбирает DNS-записи, которые соответствуют свойствам хоста
   <code class="parameter">hostname</code>.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.dns-get-record-parameters">
  <h3 class="title">Список параметров</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">hostname</code></dt>
     <dd>
      <p class="para">
       Параметр <code class="parameter">hostname</code> принимает допустимые значения DNS-имён
       наподобие <code class="literal">www.example.com</code>.
       Обратное разрешение имён хостов выполняют
       в нотации <code class="literal">in-addr.arpa</code>, но для этой цели лучше
       пользоваться функцией <span class="function"><a href="function.gethostbyaddr.php" class="function">gethostbyaddr()</a></span>.
      </p>
      <blockquote class="note"><p><strong class="note">Замечание</strong>: 
       <p class="para">
        По DNS-стандартам адреса электронной почты указывают
        в формате <code class="literal">user.host</code>, поэтому вместо <code class="literal">hostmaster@example.com</code>)
        передают <code class="literal">hostmaster.example.com</code>. Обязательно
        проверьте значение и если потребуется измените адрес, прежде чем передавать его
        в функции наподобие <span class="function"><a href="function.mail.php" class="function">mail()</a></span>.
       </p>
      </p></blockquote>
     </dd>
    
    
     <dt><code class="parameter">type</code></dt>
     <dd>
      <p class="para">
       По умолчанию функция <span class="function"><strong>dns_get_record()</strong></span> будет искать любые
       записи ресурсов, которые связаны именем хоста
       <code class="parameter">hostname</code>. Константы семейства <strong><code><a href="network.constants.php#constant.dns-any">DNS_<span class="replaceable">*</span></a></code></strong>
       помогают сузить запрос.
      </p>
     </dd>
    
    
     <dt><code class="parameter">authoritative_name_servers</code></dt>
     <dd>
      <p class="para">
       Аргумент передаётся по ссылке и при передаче заполняется ресурсными
       записями для <em>удостоверяющих серверов имён</em>
       (Authoritative Name Servers).
      </p>
     </dd>
    
    
     <dt><code class="parameter">additional_records</code></dt>
     <dd>
      <p class="para">
       Передаётся по ссылке и, если передан, будет заполняться
       <em>дополнительными записями</em>
       (Additional Records).
      </p>
     </dd>
    
    
     <dt><code class="parameter">raw</code></dt>
     <dd>
      <p class="para">
       Функция интерпретирует параметр <code class="parameter">type</code> как необработанный идентификатор типа DNS;
       в параметр нельзя передавать константы семейства <strong><code><a href="network.constants.php#constant.dns-any">DNS_<span class="replaceable">*</span></a></code></strong>.
       Значение возврата будет содержать ключ <code class="literal">data</code>, который
       потребуется проанализировать вручную.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.dns-get-record-returnvalues">
  <h3 class="title">Возвращаемые значения</h3>
  <p class="para">
   Функция возвращает массив ассоциативных массивов или <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, если возникла ошибка.
   Каждый ассоциативный массив содержит
   <em>по меньшей мере</em> следующие ключи:
   <table class="doctable table">
    <caption><strong>Основные атрибуты DNS</strong></caption>
    
     <thead>
      <tr>
       <th>Атрибут</th>
       <th>Описание</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>host</td>
       <td>
        Запись в пространстве имён DNS, к которой относятся остальные связанные
        данные.
       </td>
      </tr>

      <tr>
       <td>class</td>
       <td>
        Функция <span class="function"><strong>dns_get_record()</strong></span> возвращает только записи класса
        Internet, поэтому этот параметр возвращает только записи класса
        <code class="literal">IN</code>.
       </td>
      </tr>

      <tr>
       <td>type</td>
       <td>
        Строка, которая содержит тип записи. Дополнительные атрибуты тоже будут
        содержаться в результирующем массиве в зависимости от значения типа.
        Смотрите таблицу ниже.
       </td>
      </tr>

      <tr>
       <td>ttl</td>
       <td>
        Атрибут <code class="literal">&quot;Time To Live&quot;</code> содержит значение времени жизни, которое осталось для записи.
        Это значение <em>не</em> совпадёт с исходным ttl-значением записи.
        Значение атрибута равно исходному времени жизни за вычетом времени,
        которое прошло с момента отправки запроса на сервер.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <p class="para">
   <table class="doctable table">
    <caption><strong>Другие ключи в ассоциативных массивах, которые зависят от значения параметра <code class="parameter">type</code></strong></caption>
    
     <thead>
      <tr>
       <th>Тип записи</th>
       <th>Дополнительные данные</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><code class="literal">A</code></td>
       <td>
        <code class="literal">ip</code>: адреса IPv4 в десятичном формате с разделителями
        точками.
       </td>
      </tr>

      <tr>
       <td><code class="literal">MX</code></td>
       <td>
        <code class="literal">pri</code>: Приоритет почтового сервера. Чем ниже число, тем
        выше приоритет.
        <code class="literal">target</code>: FQDN почтового сервера.
        Смотрите также <span class="function"><a href="function.dns-get-mx.php" class="function">dns_get_mx()</a></span>.
       </td>
      </tr>

      <tr>
       <td><code class="literal">CNAME</code></td>
       <td>
        <code class="literal">target</code>: FQDN-имя места расположения в пространстве имён
        DNS, на которое указывает запись.
       </td>
      </tr>

      <tr>
       <td><code class="literal">NS</code></td>
       <td>
        <code class="literal">target</code>: FQDN-имя авторитетного
        для имени хоста сервера имён.
       </td>
      </tr>

      <tr>
       <td><code class="literal">PTR</code></td>
       <td>
        <code class="literal">target</code>: Расположение без указания пространства имён
        DNS, на которое указывает запись.
       </td>
      </tr>

      <tr>
       <td><code class="literal">TXT</code></td>
       <td>
        <code class="literal">txt</code>: Строка данных, которые связаны с записью.
       </td>
      </tr>

      <tr>
       <td><code class="literal">HINFO</code></td>
       <td>
        <code class="literal">cpu</code>: число IANA, которое обозначает модель процессора
        компьютера, на который указывает запись.
        <code class="literal">os</code>: число IANA, которое обозначает операционную систему
        компьютера, на который указывает запись.
        Смотрите дополнительно реестр названий операционных систем <a href="http://www.iana.org/assignments/operating-system-names" class="link external">&raquo;&nbsp;<code class="literal">Operating
        System Names</code></a> администрации адресного интернет-пространства IANA.
       </td>
      </tr>

      <tr>
       <td><code class="literal">CAA</code></td>
       <td>
        <code class="literal">flags</code>: Однобайтовое битовое поле; пока
        определили только бит с номером 0, который называется &#039;critical&#039;; другие биты зарезервировали
        и игнорируются.
        <code class="literal">tag</code>: Имя тега CAA (буквенно-числовая строка ASCII).
        <code class="literal">value</code>: Значение тега CAA (бинарная строка, допускаются
        подформаты).
        Дополнительную информацию даёт стандарт <a href="https://datatracker.ietf.org/doc/html/rfc6844" class="link external">&raquo;&nbsp;RFC 6844</a>.
       </td>
      </tr>

      <tr>
       <td><code class="literal">SOA</code></td>
       <td>
        <code class="literal">mname</code>: FQDN-имя изначального компьютера, с которого
        получены ресурсные записи.
        <code class="literal">rname</code>: Адрес электронной почты администратора домена.
        <code class="literal">serial</code>: Порядковый номер этой ревизии запрашиваемого
        домена.
        <code class="literal">refresh</code>: Интервал времени в секундах, который
        должны использовать вторичные серверы при обновлении удалённых копий
        этого домена.
        <code class="literal">retry</code>: Время ожидания в секундах после неудачного
        обновления до следующей попытки.
        <code class="literal">expire</code>: Максимальное время в секундах, в течение
        которого вторичный DNS-сервер должен держать в памяти данные удалённых
        копий доменной зоны, прежде чем ответить отказом, когда не удаётся обновить
        данные.
        <code class="literal">minimum-ttl</code>: Минимальное время в секундах, в течение
        которого клиент может работать с текущим DNS-разрешением, прежде чем ему
        придётся повторно запрашивать это разрешение. Значение иногда замещается
        отдельными ресурсными записями.
       </td>
      </tr>

      <tr>
       <td><code class="literal">AAAA</code></td>
       <td>
        <code class="literal">ipv6</code>: IPv6-адрес
       </td>
      </tr>

      <tr>
       <td><code class="literal">A6</code></td>
       <td>
        <code class="literal">masklen</code>: Длина в битах, которую нужно унаследовать
        от целевого адреса <code class="parameter">chain</code>.
        <code class="literal">ipv6</code>: Адрес для этой конкретной записи, который нужно
        объединить с <code class="parameter">chain</code>.
        <code class="literal">chain</code>: Запись, которую нужно дополнить данными
        <code class="parameter">ipv6</code>.
       </td>
      </tr>

      <tr>
       <td><code class="literal">SRV</code></td>
       <td>
        <code class="literal">pri</code>: (Приоритет) меньшие значения должны использоваться
        первыми.
        <code class="literal">weight</code>: Ранжирование. Записям с большим весом отдаётся
        предпочтение.
        <code class="parameter">targets</code> должен выбираться случайно.
        <code class="literal">target</code> и <code class="literal">port</code>: имя хоста и номер
        порта, на котором можно найти запрошенную службу.
        Дополнительную информацию даёт стандарт <a href="https://datatracker.ietf.org/doc/html/rfc2782" class="link external">&raquo;&nbsp;RFC 2782</a>
       </td>
      </tr>

      <tr>
       <td><code class="literal">NAPTR</code></td>
       <td>
        <code class="literal">order</code> и <code class="literal">pref</code>: Значения эквивалентны
        приведённым столбцам <code class="parameter">pri</code> и <code class="parameter">weight</code>.
        Столбцы <code class="literal">flags</code>, <code class="literal">services</code>,
        <code class="literal">regex</code> и <code class="literal">replacement</code>: Параметры,
        которые определили в стандарте <a href="https://datatracker.ietf.org/doc/html/rfc2915" class="link external">&raquo;&nbsp;RFC 2915</a>.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.dns-get-record-changelog">
  <h3 class="title">Список изменений</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Версия</th>
       <th>Описание</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>7.0.16, 7.1.2</td>
       <td>
        Добавили поддержку записей типа CAA.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.dns-get-record-examples">
  <h3 class="title">Примеры</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Пример #1 Пример получения записей функцией <span class="function"><strong>dns_get_record()</strong></span></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$result </span><span style="color: #007700">= </span><span style="color: #0000BB">dns_get_record</span><span style="color: #007700">(</span><span style="color: #DD0000">"php.net"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    
<div class="example-contents"><p>
 Вывод приведённого примера будет похож на:
</p></div>

    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Array
(
    [0] =&gt; Array
        (
            [host] =&gt; php.net
            [type] =&gt; MX
            [pri] =&gt; 5
            [target] =&gt; pair2.php.net
            [class] =&gt; IN
            [ttl] =&gt; 6765
        )

    [1] =&gt; Array
        (
            [host] =&gt; php.net
            [type] =&gt; A
            [ip] =&gt; 64.246.30.37
            [class] =&gt; IN
            [ttl] =&gt; 8125
        )

)</pre>
</div>
    </div>
   </div>
   <div class="example" id="example-2">
    <p><strong>Пример #2 Пример получения записей с типом DNS_ANY функцией <span class="function"><strong>dns_get_record()</strong></span></strong></p>
    <div class="example-contents"><p>
     Поскольку часто требуется определить IP-адрес почтового сервера,
     после разрешения MX-записи функция <span class="function"><strong>dns_get_record()</strong></span> возвращает массив
     <code class="parameter">additional_records</code> с записями, которые соответствуют серверам. Массив
     <code class="parameter">authoritative_name_servers</code> будет содержать список удостоверяющих
     DNS-серверов.
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/* Запросим запись с типом "ANY" для хоста php.net,<br />   создадим массивы $authns и $addtl,<br />   в которые функция поместит список серверов<br />   имён и дополнительные записи,<br />   которые соответствуют этим серверам<br />*/<br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">dns_get_record</span><span style="color: #007700">(</span><span style="color: #DD0000">"php.net"</span><span style="color: #007700">, </span><span style="color: #0000BB">DNS_ANY</span><span style="color: #007700">, </span><span style="color: #0000BB">$authns</span><span style="color: #007700">, </span><span style="color: #0000BB">$addtl</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"Результат = "</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"Удостоверяющие серверы = "</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$authns</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"Дополнительные записи = "</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$addtl</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    
<div class="example-contents"><p>
 Вывод приведённого примера будет похож на:
</p></div>

    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Результат = Array
(
    [0] =&gt; Array
        (
            [host] =&gt; php.net
            [type] =&gt; MX
            [pri] =&gt; 5
            [target] =&gt; pair2.php.net
            [class] =&gt; IN
            [ttl] =&gt; 6765
        )

    [1] =&gt; Array
        (
            [host] =&gt; php.net
            [type] =&gt; A
            [ip] =&gt; 64.246.30.37
            [class] =&gt; IN
            [ttl] =&gt; 8125
        )

)
Удостоверяющие серверы = Array
(
    [0] =&gt; Array
        (
            [host] =&gt; php.net
            [type] =&gt; NS
            [target] =&gt; remote1.easydns.com
            [class] =&gt; IN
            [ttl] =&gt; 10722
        )

    [1] =&gt; Array
        (
            [host] =&gt; php.net
            [type] =&gt; NS
            [target] =&gt; remote2.easydns.com
            [class] =&gt; IN
            [ttl] =&gt; 10722
        )

    [2] =&gt; Array
        (
            [host] =&gt; php.net
            [type] =&gt; NS
            [target] =&gt; ns1.easydns.com
            [class] =&gt; IN
            [ttl] =&gt; 10722
        )

    [3] =&gt; Array
        (
            [host] =&gt; php.net
            [type] =&gt; NS
            [target] =&gt; ns2.easydns.com
            [class] =&gt; IN
            [ttl] =&gt; 10722
        )

)
Дополнительные записи = Array
(
    [0] =&gt; Array
        (
            [host] =&gt; pair2.php.net
            [type] =&gt; A
            [ip] =&gt; 216.92.131.5
            [class] =&gt; IN
            [ttl] =&gt; 6766
        )

    [1] =&gt; Array
        (
            [host] =&gt; remote1.easydns.com
            [type] =&gt; A
            [ip] =&gt; 64.39.29.212
            [class] =&gt; IN
            [ttl] =&gt; 100384
        )

    [2] =&gt; Array
        (
            [host] =&gt; remote2.easydns.com
            [type] =&gt; A
            [ip] =&gt; 212.100.224.80
            [class] =&gt; IN
            [ttl] =&gt; 81241
        )

    [3] =&gt; Array
        (
            [host] =&gt; ns1.easydns.com
            [type] =&gt; A
            [ip] =&gt; 216.220.40.243
            [class] =&gt; IN
            [ttl] =&gt; 81241
        )

    [4] =&gt; Array
        (
            [host] =&gt; ns2.easydns.com
            [type] =&gt; A
            [ip] =&gt; 216.220.40.244
            [class] =&gt; IN
            [ttl] =&gt; 81241
        )

)</pre>
</div>
    </div>
   </div>
  </p>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.dns-get-record-seealso">
  <h3 class="title">Смотрите также</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.dns-get-mx.php" class="function" rel="rdfs-seeAlso">dns_get_mx()</a> - Псевдоним getmxrr</span></li>
    <li><span class="function"><a href="function.dns-check-record.php" class="function" rel="rdfs-seeAlso">dns_check_record()</a> - Псевдоним checkdnsrr</span></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>