PHP マニュアル
前のページ |  | 次のページ

# dns_get_record

(PHP 5)

dns_get_record -- ホスト名に関連する DNS リソースレコードを取得する

## 説明

array dns_get_record ( string hostname [, int type [, array &authns, array &addtl]] )

> 注意: この関数は Windows プラットフォームでは実装されていません。 また、（現時点では）*BSD システムでも動作しません。 PEAR の Net_DNS クラスを試してみてください。

この関数は、連想配列を要素にもつ配列を返します。それぞれの連想配列には 少なくとも 以下のキーが含まれています:

表 1. 基本 DNS 属性

属性 | 意味
--- | ---
host | これ以降の関連するデータが参照する DNS 名。
class | dns_get_record() は Internet クラスの レコードのみを返すので、このパラメータは常に `IN` を返します。
type | レコード型を表す文字列。type の値に応じて、結果の配列には 追加の属性が含まれます。以下の表を参照ください。
ttl | このレコードの有効期限。レコードの本来の ttl と一致するとは 限りません。むしろ、ネームサーバへの クエリにかかった時間をそこから引いたものに一致します。

`hostname` は、正しい DNS ホスト名、すなわち "www.example.com" のようなものでなければなりません。 in-addr.arpa 形式の表記を用いた逆引き検索は可能ですが、 たいていは gethostbyaddr() を用いるほうが適当です。

デフォルトでは、dns_get_record() は `hostname` に関連するすべてのリソースレコードを 検索します。これを制限するには、オプションの `type` パラメータを指定してください。 `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` or `DNS_ANY` 。 デフォルトは DNS_ANY です。

> 注意: プラットフォーム依存の libresolv のおかしな挙動のせいで、 `DNS_ANY` が常にすべてのレコードを返すとは 限りません。速度は遅くなりますが、`DNS_ALL` のほうがより確実にすべてのレコードを取得できます。

3 番目、4 番目のオプションの引数 `authns` と `addtl` はリファレンスで渡され、もし指定された場合はそこにそれぞれ Authoritative Name Servers, と Additional Records が格納されます。 下の例を参照ください。

表 2. 'type' に応じて連想配列に追加される項目

レコード型 | 追加項目
--- | ---
`A` | `ip`: ドット区切り 10 進数形式の IPv4 アドレス。
`MX` | `pri`: メールエクスチェンジャの優先度。 数字が小さいほど優先度が高い。 `target`: メールエクスチェンジャの FQDN 。 dns_get_mx() も参照ください。
`CNAME` | `target`: レコードのエイリアスの対象となっている 場所の FQDN 。
`NS` | `target`: このホスト名に対する権威をもっている ネームサーバの FQDN 。
`PTR` | `target`: レコードが指している、DNS 名前空間内の場所
`TXT` | `txt`: このレコードに関連付けられている任意の文字列。
`HINFO` | `cpu`: このレコードが参照しているマシンの CPU を 識別する IANA 番号。 `os`: このレコードが参照しているマシン上の OS を 識別する IANA 番号。 これらの値の意味については、IANA の Operating System Names を参照ください。
`SOA` | `mname`: リソースレコードの元となるマシンの FQDN 。 `rname`: このドメインの管理責任者の Email アドレス。 `serial`: ドメインのシリアル番号。 `refresh`: セカンダリネームサーバがこのドメインの コピーを更新する際に参照するリフレッシュ間隔（秒単位）。 `retry`: リフレッシュが失敗した際に 2 度目の リフレッシュを試みるまでの間隔（秒単位） `expire`: セカンダリネームサーバが、ゾーンデータの リフレッシュに失敗した場合にコピーのデータを破棄せず持ち続ける期間 （秒単位）。 `minimum-ttl`: クライアントが、一度取得したデータを 再リクエストすることなしに利用できる最小期間（秒単位）。個々の リソースレコードによって上書きが可能。
`AAAA` | `ipv6`: IPv6 アドレス。
`A6`(PHP >= 5.1.0) | `masklen`: `chain` で指定された対象から引き継ぐビット長。 `ipv6`: `chain` と マージするためのこのレコードのアドレス。 `chain`: `ipv6` データと マージするための親レコード。
`SRV` | `pri`: (Priority) 値が小さいものが優先されます。 `weight`: 同じ優先順位の `targets` からランダムに選択する際の重み。 `target` および `port`: リクエストされたサービスが存在するホスト名とポート。 詳細は RFC 2782 を参照ください。
`NAPTR` | `order` および `pref`: 上の `pri` および `weight` と同じ。 `flags`, `services`, `regex`, および `replacement`: RFC 2915 で定義されるパラメータ。

> 注意: DNS の標準規格により、メールアドレスは user.host 形式で渡されます （たとえば、hostmaster.example.com が hostmaster@example.com の代わりとなります）。 この値をしっかり確認し、mail() のような関数で 利用する前には必要なら変更を加えることを忘れないようにしてください。

例 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
            )

    )

MX レコードが解決されれば、たいていはメールサーバの IP アドレスを 取得したくなるものです。そのため、dns_get_record() は `addtl` に関連するレコードを含めて返します。 また、`authns` には権威のあるネームサーバの リストを含めて返します。

例 2. dns_get_record() と DNS_ANY の使用

`<?php /* php.net の "ANY" レコードを要求し、 それに付随する情報を格納した配列を 作成する。 $authns にはネームサーバの一覧が、 また $addtl には追加レコードが それぞれ格納される。 */ $result = dns_get_record("php.net", DNS_ANY, $authns, $addtl); echo "Result = "; print_r($result); echo "Auth NS = "; print_r($authns); echo "Additional = "; print_r($addtl); ?>`

上の例の出力は例えば以下のようになります:

    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
            )

    )
    Auth NS = 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
            )

    )
    Additional = 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
            )

    )

dns_get_mx() および dns_check_record() も参照ください。

前のページ | ホーム | 次のページ
dns_get_mx | 上に戻る | fsockopen