PHPでは、ドメイン名に基づいて対応するIPv4アドレスを取得する必要があることがよくあります。これは、ネットワークリクエスト用のWebサイトのIPアドレスを取得したり、サーバー上のドメイン名の解像度とアクセス制御を実行したりするなど、多くのアプリケーションシナリオで非常に一般的な要件です。 PHPは非常に便利な機能-Gethostbynamel ()を提供します。これにより、ドメイン名に対応するすべてのIPv4アドレスをすばやく返すことができます。
この記事では、Gethostbynamel()関数を使用して、指定されたドメイン名のIPv4アドレスを取得し、実際のケースと組み合わせて実証する方法を紹介します。
gethostbynamel()は、ドメイン名をパラメーターとして取得し、ドメイン名のすべてのIPv4アドレスを含む配列を返すPHPに組み込まれた関数です。この関数は、DNSクエリを使用してドメイン名を解決し、Aレコードを介して対応するIPv4アドレスを返します。この関数は配列を返し、各要素はIPv4アドレスであることに注意する必要があります。
array gethostbynamel ( string $hostname )
$ hostname :解析する必要があるドメイン名。
返品値:成功した場合は、IPv4アドレスを含む配列を返します。失敗した場合は、 falseを返します。
ドメイン名gitbox.netのすべてのIPv4アドレスを取得する必要があるとします。次のコードを使用して実装できます。
<?php
$domain = "gitbox.net"; // ドメイン名
// 使用 gethostbynamel すべてを取得します IPv4 住所
$ipv4Addresses = gethostbynamel($domain);
// 判断是否成功获取到住所
if ($ipv4Addresses !== false) {
echo "ドメイン名 {$domain} の IPv4 住所有:\n";
foreach ($ipv4Addresses as $address) {
echo $address . "\n";
}
} else {
echo "无法解析ドメイン名 {$domain} の IPv4 住所。\n";
}
?>
ドメイン名 gitbox.net の IPv4 住所有:
192.168.1.1
192.168.1.2
PHPでは、 gethostbyname()関数を使用して単一のIPv4アドレスを取得することもできます。ただし、ドメイン名に複数のIPv4アドレスがある場合(たとえば、DNS構成で複数のAレコードが設定されている場合)、 gethostbyname()はそのうちの1つのみを返すことができます。対照的に、 gethostbynamel()関数はドメイン名に関連付けられたすべてのIPv4アドレスを返します。そのため、すべてのアドレスを取得する必要があるシナリオにより適しています。
たとえば、 gethostbyname()を使用したコードは次のとおりです。
<?php
$domain = "gitbox.net";
$ipv4Address = gethostbyname($domain);
echo "ドメイン名 {$domain} の IPv4 住所是:{$ipv4Address}\n";
?>
ドメイン名に複数のレコードがある場合、上記のコードはアドレスの1つのみを返し、 gethostbynamel()はすべてのIPv4アドレスを取得できるようにします。
DNSキャッシングの問題:PHPのDNSクエリキャッチ結果の結果、同じドメイン名を複数回要求する場合、返された結果はキャッシュから得られる場合があります。 PHPサービスを再起動するか、DNS更新ポリシーを使用することにより、最新の解決策の結果が得られるようにすることができます。
IPv6サポート: gethostbynamel()は、IPv4アドレスのみを返します。ドメイン名のIPv6アドレスを取得する必要がある場合は、 getaddrinfo()関数を使用するか、 gethostbyname6()およびその他の関数を使用して実装できます。
エラー処理: gethostbynamel()関数がドメイン名を解決できない場合、 falseが返されます。したがって、実際のアプリケーションでは、予期せぬエラーを避けるために適切なエラー処理が必要です。
パフォーマンスの考慮事項:DNSクエリはネットワーク操作であり、比較的遅いです。同じドメイン名を頻繁に解決する必要がある場合は、DNSクエリの重複を避けるために、解析結果のキャッシュを検討できます。
Gethostbynamel()は、開発者がドメイン名のすべてのIPv4アドレスを簡単に取得できるようにする非常に便利で実用的な機能です。複数のIPアドレスを取得する必要がある場合、この関数を使用すると、従来のgethostbyname()よりも効率的かつ正確になります。それを使用する方法と注意する方法を理解することにより、開発者は実際のプロジェクトでそれをよりよく利用して、ドメイン名の解像度関連関数を実装できます。