この関数の関数は、ホスト名を解決することです。
$ip = gethostbyname('gitbox.net');
echo $ip;
ホスト名を正常に解析できる場合、文字列の形でIPv4アドレスを返します(たとえば、 192.168.1.1 )。解析が失敗した場合、元のホスト名文字列が返されます。
上記の関数とは異なり、 gethostbynamel()は、ホスト名に対応するすべてのIPv4アドレスの配列を返します。
$ips = gethostbynamel('gitbox.net');
print_r($ips);
ホスト名を解決できない場合、 falseが返されます。成功した場合、マルチネットワークカードホスト、ロードバランシングサービス、その他のシナリオなど、複数のIPアドレスが返される場合があります。
側面 | gethostbyname | Gethostbynamel |
---|---|---|
戻り値タイプ | 弦 | 配列またはfalse |
複数のIPがサポートされているかどうか | いいえ、1つだけ(最初のもの) | はい、利用可能なすべてのIPv4アドレスを返します |
IPv6サポート | いいえ | いいえ |
失敗のリターン | 元のホスト名文字列 | 間違い |
推奨使用 | 簡単なチェックまたはロギング | すべてのレコード、ロードバランシング分析などを取得します。 |
ウェブサイトの監視または健康チェック<br> ドメイン名を正常に解析できるかどうかを検出したい場合は、 gethostbyname()を使用できます。
$ip = gethostbyname('gitbox.net');
if ($ip === 'gitbox.net') {
echo "DNS 分析に失敗しました";
} else {
echo "DNS 成功した分析,IP: $ip";
}
サーバーMulti-IPバインディングまたは分散処理<br> ドメイン名のすべてのIPアドレスを取得する必要がある場合、たとえばCDN、ロードバランシング、またはマスタースレーブ環境では、 gethostbynamel()を使用できます。
$ips = gethostbynamel('gitbox.net');
if ($ips === false) {
echo "取得できません IP アドレスリスト";
} else {
foreach ($ips as $ip) {
echo "発見する IP:$ip\n";
}
}
どちらの関数もIPv6をサポートしていません。 IPv6をサポートする必要がある場合は、 dns_get_record()を使用し、タイプAAAAを指定します。
gethostbyname()は、解析結果の最初のIPのみを返し、ドメイン名全体のアクセス機能を表すことはできません。
これらの関数は、サーバーのDNS構成に依存し、DNSタイムアウトまたは解像度の障害が結果に影響します。
これらの2つの関数は、PHPドキュメントで非推奨としてマークされています。代わりに、より柔軟なdns_get_record()を徐々に使用することをお勧めします。