現在の位置: ホーム> 最新記事一覧> ドメイン名に対応するすべてのIPv4アドレスを取得したいですか? Gethostbynamel関数は、問題を簡単に解決するのに役立ちます

ドメイン名に対応するすべてのIPv4アドレスを取得したいですか? Gethostbynamel関数は、問題を簡単に解決するのに役立ちます

gitbox 2025-06-15

PHPでは、ドメイン名に基づいて対応するIPv4アドレスを取得する必要があることがよくあります。これは、ネットワークリクエスト用のWebサイトのIPアドレスを取得したり、サーバー上のドメイン名の解像度とアクセス制御を実行したりするなど、多くのアプリケーションシナリオで非常に一般的な要件です。 PHPは非常に便利な機能-Gethostbynamel ()を提供します。これにより、ドメイン名に対応するすべてのIPv4アドレスをすばやく返すことができます。

この記事では、Gethostbynamel()関数を使用して、指定されたドメイン名のIPv4アドレスを取得し、実際のケースと組み合わせて実証する方法を紹介します。

gethostbynamel()関数とは何ですか?

gethostbynamel()は、ドメイン名をパラメーターとして取得し、ドメイン名のすべてのIPv4アドレスを含む配列を返すPHPに組み込まれた関数です。この関数は、DNSクエリを使用してドメイン名を解決し、Aレコードを介して対応するIPv4アドレスを返します。この関数は配列を返し、各要素はIPv4アドレスであることに注意する必要があります。

関数プロトタイプ

array gethostbynamel ( string $hostname )
  • $ hostname :解析する必要があるドメイン名。

  • 返品値:成功した場合は、IPv4アドレスを含む配列を返します。失敗した場合は、 falseを返します。

例: gethostbynamel()を使用してドメイン名のIPv4アドレスを取得する方法

ドメイン名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

gethostbyname ()よりもgethostbynamel )を使用する方が適切なのはなぜですか?

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アドレスを取得できるようにします。

注意すべきこと

  1. DNSキャッシングの問題:PHPのDNSクエリキャッチ結果の結果、同じドメイン名を複数回要求する場合、返された結果はキャッシュから得られる場合があります。 PHPサービスを再起動するか、DNS更新ポリシーを使用することにより、最新の解決策の結果が得られるようにすることができます。

  2. IPv6サポートgethostbynamel()は、IPv4アドレスのみを返します。ドメイン名のIPv6アドレスを取得する必要がある場合は、 getaddrinfo()関数を使用するか、 gethostbyname6()およびその他の関数を使用して実装できます。

  3. エラー処理gethostbynamel()関数がドメイン名を解決できない場合、 falseが返されます。したがって、実際のアプリケーションでは、予期せぬエラーを避けるために適切なエラー処理が必要です。

  4. パフォーマンスの考慮事項:DNSクエリはネットワーク操作であり、比較的遅いです。同じドメイン名を頻繁に解決する必要がある場合は、DNSクエリの重複を避けるために、解析結果のキャッシュを検討できます。

結論は

Gethostbynamel()は、開発者がドメイン名のすべてのIPv4アドレスを簡単に取得できるようにする非常に便利で実用的な機能です。複数のIPアドレスを取得する必要がある場合、この関数を使用すると、従来のgethostbyname()よりも効率的かつ正確になります。それを使用する方法と注意する方法を理解することにより、開発者は実際のプロジェクトでそれをよりよく利用して、ドメイン名の解像度関連関数を実装できます。