(PHP 5, PHP 7, PHP 8)
dns_get_record — ホスト名に関連する DNS リソースレコードを取得する
$hostname,$type = DNS_ANY,&$authoritative_name_servers = null,&$additional_records = null,$raw = false
指定した hostname
に関連づけられた DNS リソースレコードを取得します。
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 パラメータを指定してください。
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のほうがより確実にすべてのレコードを取得できます。
注意:
authoritative_name_servers参照で渡し、 Authoritative Name Servers のリソースレコードが格納されます。
additional_records参照で渡し、 Additional Records が格納されます。
raw
type は生のDNSのタイプIDとして解釈されます。
(DNS_* 定数は使えません)
戻り値には手動でパースが必要な data キーが含まれます。
この関数は、連想配列を要素にもつ配列を返します。
失敗した場合に false を返します。
それぞれの連想配列には
少なくとも 以下のキーが含まれています:
| 属性 | 意味 |
|---|---|
| host | これ以降の関連するデータが参照する DNS 名。 |
| class |
dns_get_record() は
Internet クラスのレコードのみを返すので、このパラメータは常に
IN を返します。
|
| type | レコード型を表す文字列。type の値に応じて、 結果の配列には追加の属性が含まれます。以下の表を参照ください。 |
| ttl |
このレコードの"有効期限 (Time To Live)"。レコードの本来の ttl と一致するとは
限りません。むしろ、
ネームサーバーへのクエリにかかった時間をそこから引いたものに一致します。
|
| レコード型 | 追加項目 |
|---|---|
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
を参照ください。
|
CAA |
flags: 1バイトのビットフィールド;
現在はビット0だけが定義されており、'critical' を意味します。
他のビットは予約されており、無視されるべきです。
tag: CAA タグの名前 (alphanumeric な ASCII 文字列).
value: CAA タグの値 (バイナリ文字列, サブフォーマットの使用可)
詳細は、» RFC 6844 を参照ください。
|
SOA |
mname: リソースレコードの元となるマシンの FQDN 。
rname: このドメインの管理責任者の Email アドレス。
serial: ドメインのシリアル番号。
refresh:
セカンダリネームサーバーがこのドメインのコピーを更新する際に参照するリフレッシュ間隔(秒単位)。
retry: リフレッシュが失敗した際に
2 度目のリフレッシュを試みるまでの間隔(秒単位)
expire: セカンダリネームサーバーが、ゾーンデータの
リフレッシュに失敗した場合にコピーのデータを破棄せず持ち続ける期間
(秒単位)。
minimum-ttl: クライアントが、
一度取得したデータを再リクエストすることなしに利用できる最小期間(秒単位)。
個々のリソースレコードによって上書きが可能。
|
AAAA |
ipv6: IPv6 アドレス。
|
A6 |
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 で定義されるパラメータ。
|
| バージョン | 説明 |
|---|---|
| 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 の使用
MX レコードが解決されれば、たいていはメールサーバーの IP アドレスを
取得したくなるものです。そのため、dns_get_record()
は additional_records に関連するレコードを含めて返します。
また、authoritative_name_servers には
権威のあるネームサーバーのリストを含めて返します。
<?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
)
)