dns_get_record

dns_get_record関数:DNSのレコードを検索する

使い方

$records = dns_get_record( ‘google.co.jp’ , DNS_A );

PHPでは関数1つでDNSのレコードを取得することができます。
第1引数にDNSレコードを検索したいホスト名を指定し、第2引数には取得するDNSレコードのタイプを定数で指定します。

戻り値にはDNSレコードが格納された連想配列が返ります。

戻り値の例 (google.co.jpのAレコード検索)

array (
  0 =>
  array (
    'host' => 'google.co.jp',
    'type' => 'A',
    'ip' => '173.194.38.95',
    'class' => 'IN',
    'ttl' => 299,
  ),
  1 =>
  array (
    'host' => 'google.co.jp',
    'type' => 'A',
    'ip' => '173.194.38.88',
    'class' => 'IN',
    'ttl' => 299,
  ),
  2 =>
  array (
    'host' => 'google.co.jp',
    'type' => 'A',
    'ip' => '173.194.38.87',
    'class' => 'IN',
    'ttl' => 299,
  ),
)

第2引数には定数を指定することができますが、
このような定数を指定することができます。(一部抜粋です。これで全部ではありません。)

定数 定数の意味
DNS_A Aレコードのみ検索する
DNS_MX MXレコードのみ検索する
DNS_TXT TXTレコードのみ検索する(SPFを見たいときなど)
DNS_ALL 全レコードを検索する

注意点

多くの場合において、こういったDNSレコードを調べたりする関数の場合には、レコードの検索に時間がかかることがあります。(キャッシュされていれば一瞬で返るので気づきにくいですが。)
また、DNSサーバーへの問い合わせがタイムアウトして失敗することもあります。そのあたりも十分考慮したうえでプログラムを書きましょう。

使いどころ

AレコードやMXレコードを検索したくなったら、dns_get_record関数を使いましょう!
と、言いたいんですが、Aレコードを検索するなら、gethostbyname関数やgethostbynamel関数を使った方が良いです。
MXレコードを検索したくなったら、getmxrr関数を使った方が良いです。
入力されたドメインが存在するドメインかどうか調べたくなったら、checkdnsrr関数を使ったほうが良いです。
それは、なぜか。
目的がはっきりしていることでソースの意味が分かりやすくなることと、
そしてなにより、不要な情報を取得しない分、早いのです。

結論としては、DNSレコードを詳細まで調べたい場合に、この関数を使いましょう。
使いどころとしてはSPFレコードを調べて、メールの送信元を確認する際には役に立つでしょう。

公式サイト
http://www.php.net/manual/ja/function.dns-get-record.php