【PHP8.x】gethostbynamel関数の使い方

作成日: 更新日:

gethostbynamel関数は、指定されたホスト名、つまりインターネット上のコンピューターの名前やドメイン名に対応する、すべてのIPv4アドレスのリストを取得するために実行される関数です。ウェブサイトのURLなどで使われるホスト名と、コンピューターが通信に使う数字の羅列であるIPアドレスは、人間とコンピューターがそれぞれ識別しやすいように使い分けられています。この関数は、与えられたホスト名から、そのホスト名に紐づくIPv4アドレスをすべて探し出し、配列として返します。

例えば、大規模なウェブサービスでは、アクセス集中に備えて一つのホスト名に対して複数のサーバーが用意され、それぞれ異なるIPアドレスが割り当てられていることがあります。このような場合、gethostbynamel関数を使うと、関連するすべてのIPv4アドレスを一括で取得できます。これにより、アプリケーション内で複数のサーバーへの接続を試みたり、独自の負荷分散処理を実装したりする際に非常に有用です。

この関数には、IPアドレスを調べたいホスト名を文字列として引数に渡します。処理が成功すると、取得したIPv4アドレスの文字列が格納された配列が戻り値として返されます。もし指定されたホスト名が見つからなかったり、ネットワークの問題などによりIPアドレスの取得に失敗したりした場合は、論理値のfalseが返されますので、プログラムで戻り値を適切に確認してエラー処理を行うことが重要です。この関数は、ドメイン名とIPアドレスを変換するDNS(Domain Name System)というサービスを利用しており、動作にはネットワーク接続が必要です。なお、IPv6アドレスの取得には対応していませんのでご留意ください。

基本的な使い方

構文(syntax)

<?php
$resolved_ips = gethostbynamel('www.example.com');
?>

引数(parameters)

string $hostname

  • string $hostname: IPアドレスを取得したいホスト名またはIPアドレスを指定する文字列

戻り値(return)

array|false

指定されたホスト名に関連付けられたIPアドレスの配列、または名前解決に失敗した場合はfalseを返します。

サンプルコード

PHPでホスト名からIPアドレスリストを取得する

<?php

/**
 * ホスト名に対応するIPアドレスのリストを取得するサンプルコード
 */

$hostname = 'example.com'; // ホスト名を指定

$ipAddresses = gethostbynamel($hostname);

if ($ipAddresses !== false) {
    echo "ホスト名: " . $hostname . "\n";
    echo "IPアドレス:\n";
    foreach ($ipAddresses as $ipAddress) {
        echo "- " . $ipAddress . "\n";
    }
} else {
    echo "ホスト " . $hostname . " のIPアドレスを取得できませんでした。\n";
}

?>

このPHPサンプルコードは、指定されたホスト名に対応するIPアドレスのリストを取得する方法を示しています。gethostbynamel()関数は、引数としてホスト名(文字列)を受け取り、そのホスト名に関連付けられたすべてのIPアドレスを配列として返します。もしホスト名が見つからない場合や、IPアドレスの解決に失敗した場合は、falseを返します。

サンプルコードでは、まず変数$hostnameにIPアドレスを調べたいホスト名(例:'example.com')を文字列で設定します。次に、gethostbynamel()関数にこのホスト名を渡して、IPアドレスのリストを取得します。

戻り値がfalseでない場合(つまり、IPアドレスが正常に取得できた場合)、ホスト名と取得したIPアドレスを順番に表示します。配列として返されたIPアドレスは、foreachループを使って一つずつ取り出し、表示しています。

もしgethostbynamel()関数がfalseを返した場合、指定されたホスト名のIPアドレスを取得できなかったことを示すエラーメッセージが表示されます。この関数を使用することで、システムエンジニアは指定されたホスト名に対応するIPアドレスをプログラム内で効率的に取得し、ネットワーク関連の処理に利用できます。例えば、特定のホストへの接続可否を確認したり、ログに記録したりする際に役立ちます。

gethostbynamel関数は、指定されたホスト名に対応するすべてのIPアドレスを配列で返します。しかし、ホスト名が存在しない場合やDNSサーバーが応答しない場合など、IPアドレスの解決に失敗するとfalseを返します。そのため、戻り値がfalseでないことを必ず確認してから、配列として処理する必要があります。また、セキュリティ上の理由から、ユーザーからの入力を直接$hostnameに渡すことは避けてください。もしユーザー入力を利用する場合は、入力値を厳密に検証し、想定外のホスト名が指定されないように注意が必要です。さらに、この関数はDNSルックアップを行うため、ネットワーク環境に依存します。ネットワークが利用できない状況では、期待通りの結果が得られない可能性があります。

【PHP8.x】gethostbynamel関数の使い方 | いっしー@Webエンジニア