[PHP] DNS関連の関数まとめ
仕事で様々なドメインのレコードをチェックする機会が増えてきました。
mxtoolboxのような様々なDNSレコードをチェックできるサイトもありますが毎回頼りきりなのもなんなので自分で作ってみることにしました。
その為に必要なPHPのDNSに関連する関数をまとめてみました。
checkdnsrr
説明
指定したホスト名(またはIPアドレス)にレコードが存在しているか否かを確認する。
パラメーター
host
ホスト名かIPアドレスを指定できます。
type
レコードのタイプを指定して確認することができます。
以下のいずれかのタイプを指定できます。
A, MX, NS, SOA, PTR, CNAME, AAAA, A6, SRV, NAPTR, TXT or ANY.
記入例
checkdnsrr('google.co.jp', "MX")
返り値
レコードが存在していればTrue、存在していない場合Falseを返します。
dns_get_record
説明
指定したホスト名に関連づけられた DNSレコードを取得します
パラメーター
hostname
ホスト名を指定します。
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
※MXレコードを取得する場合には後述のgetmxrrを使用したほうが早いです。
こちらの環境ではDNS_ALLはエラーとなり使用できませんでした。
dns_get_record(): DNS Query failed
パラメーター無しでALLのような結果を得ることができました。
php.netにはDNS_ANYの利用について以下のような記載があります。
注意:
プラットフォーム依存の libresolv のおかしな挙動のせいで、 DNS_ANY が常にすべてのレコードを返すとは 限りません。速度は遅くなりますが、DNS_ALL のほうがより確実にすべてのレコードを取得できます。
https://www.php.net/manual/ja/function.dns-get-record.php
よって、すべてのレコードを取得したい場合は、DNS_ALLまたはパラメータ無しがよいでしょう。
記入例
dns_get_record('google.co.jp', DNS_TXT) //タイプを指定 ※タイプは""で囲わない
dns_get_record('google.co.jp') //タイプ指定なし
返り値
連想配列を要素にもつ配列を返します。取得に失敗した場合にはfalseを返します。
配列に必ず含まれる要素
- host
- class
- type
- ttl
タイプにより連想配列に追加される要素
- A
- MX
- CNAME
- NS
- PTR
- TXT
- HINFO
- CAA
- SOA
- AAAA
- A6(PHP >= 5.1.0)
- SRV
- NAPTR
例) タイプにDNS_TXT を指定した場合
array(1) { [0]=> array(6) { [“host”]=> string(12) “google.co.jp” [“class”]=> string(2) “IN” [“ttl”]=> int(300) [“type”]=> string(3) “TXT” [“txt”]=> string(11) “v=spf1 -all” [“entries”]=> array(1) { [0]=> string(11) “v=spf1 -all” } } }
getmxrr
説明
指定したホスト名に対応するMXレコードを取得する
パラメーター
hostname
ホスト名
mxhosts
上記ホスト名で見つかったMXレコードが配列として格納されます。
weight
このパラメーターを指定するとウエイトが配列として格納されます。
記入例
$res = getmxrr('google.co.jp' , $mxhosts, $weight);
返り値
上記のように記載した場合、$resには何かしらのレコードが見つかった場合はTRUE、見つからなかった場合にはFALSEを返します。
TRUEの場合、$mxhostsにはMXレコードが、$weightにはウエイトがそれぞれ配列で格納されます。
’google.co.jp’のMXレコードをチェックした場合、$mxhosts,$weightにはそれぞれ以下のように返り値が格納されます。
$mxhosts
array(5) { [0]=> string(23) “xxx.xxxxx.x.google.com” [1]=> string(23) “xxxx.xxxxx.x.google.com” [2]=> string(23) “xxxx.xxxxx.x.google.com” [3]=> string(23) “xxxx.xxxxx.x.google.com” [4]=> string(18) “xxxxx.x.google.com” }
$weight
array(5) { [0]=> int(30) [1]=> int(20) [2]=> int(50) [3]=> int(40) [4]=> int(10) }
getmxrr('google.co.jp' , $mxhosts, $weight);
for($i=0;$i<count($mxhosts);$i++){
$mxs[$mxhosts[$i]] = $weight[$i];
}
print_r(mxs);
このように出力するとキレイかなと思います。
gethostbyname
説明
ドメイン名に紐づくIPアドレスを取得します。(正引き)
パラメーター
hostname
ホスト名
記入例
gethostbyname('google.co.jp')
返り値
指定したホスト名のIPv4アドレスを返します。
返り値の例
string(14) “xxx.xxx.xxx.xxx”
gethostbynamel
ドメイン名に紐づくIPアドレスのリストを取得します。(正引き)
パラメーター
hostname
ホスト名
記入例
gethostbynamel('google.co.jp')
返り値
指定したホスト名で検索して取得したIPv4アドレスのリストを配列で返します。
array(1) { [0]=> string(14) “xxx.xxx.xxx.xxx” }
gethostbyaddr
指定したIPアドレスに対応するドメイン名を取得します。(逆引き)
パラメーター
ipaddress
IPアドレス
記入例
gethostbyaddr(xxx.xxx.xxx.xxx)
返り値
指定したIPアドレスに対応するホストが存在する場合はホスト名を返します。存在しない場合はFALSEを返します。
ディスカッション
コメント一覧
まだ、コメントがありません