【PHP】gethostbynameとgethostbynamelの違い

PHP関数のgethostbynamegethostbynamelを使用すると、ホスト名のIPアドレスを取得することができる。

関数の説明・用途、使用例、注意事項、関連関数について以下にまとめる。

関数の説明・用途

gethostbyname(ホスト名)

引数にホスト名を指定すると、IPアドレス(IPv4アドレス)を文字列として取得できる。ホスト名に対応するIPアドレスが複数ある場合、そのうちの1つのみ取得できる。

gethostbyname(ホスト名)

引数にホスト名を指定すると、IPアドレス(IPv4アドレス)を配列として取得できる。ホスト名に対応するIPアドレスが複数ある場合、複数取得できる。

関数の使用例

以下に掲載する使用例は、Ubuntu 20.04 LTSにインストールしたPHP 7.4.3環境において、PHPをコマンドラインで実行した例となる。

ホスト名に対応するIPアドレスが1つのみの場合

PHP関数のgethostbynameとgethostbynamelで「nobuneko.com」を実行した結果

PHP関数のgethostbynameとgethostbynamelで「nobuneko.com」を実行した結果の画面キャプチャ。

この画面キャプチャをテキストにしたものは以下。コピペでコードを実行してみたい方は以下よりどうぞ。

$ php -r "print_r(gethostbyname('nobuneko.com'));echo PHP_EOL;"
150.95.8.165
$ php -r "print_r(gethostbynamel('nobuneko.com'));echo PHP_EOL;"
Array
(
    [0] => 150.95.8.165
)

ホスト名に対応するIPアドレスが複数ある場合

PHP関数のgethostbynameとgethostbynamelで「yahoo.co.jp」を実行した結果

PHP関数のgethostbynameとgethostbynamelで「yahoo.co.jp」を実行した結果の画面キャプチャ。

この画面キャプチャをテキストにしたものは以下。コピペでコードを実行してみたい方は以下よりどうぞ。

$ php -r "print_r(gethostbyname('yahoo.co.jp'));echo PHP_EOL;"
183.79.135.206
$ php -r "print_r(gethostbyname('yahoo.co.jp'));echo PHP_EOL;"
183.79.135.206
$ php -r "print_r(gethostbyname('yahoo.co.jp'));echo PHP_EOL;"
182.22.59.229
$ php -r "print_r(gethostbynamel('yahoo.co.jp'));echo PHP_EOL;"
Array
(
    [0] => 182.22.59.229
    [1] => 183.79.135.206
)

$ php -r "print_r(gethostbynamel('yahoo.co.jp'));echo PHP_EOL;"
Array
(
    [0] => 182.22.59.229
    [1] => 183.79.135.206
)

$ php -r "print_r(gethostbynamel('yahoo.co.jp'));echo PHP_EOL;"
Array
(
    [0] => 183.79.135.206
    [1] => 182.22.59.229
)

関数の注意事項

この例では関数を実行するたびに、ホスト名に対応するIPアドレスが変わっている。

ホスト名に対応するIPアドレスが複数ある場合、gethostbyname関数では実行するたびに取得する文字列(=IPアドレス)が変わる可能性があること、gethostbynamel関数では実行するたびに取得する配列の要素(IPアドレス)の順番が変わる可能性があることに注意が必要。

関連する関数

gethostbynameとgethostbynamelは、ホスト名からIPアドレスを求める関数(ホスト名からIPアドレスを正引きする関数)だが、その逆の働きをする関数(IPアドレスからホスト名を逆引きする関数)は、gethostbyaddrとなる。

当ブログ内の関連記事

【PHP】gethostbyaddrの使い方

前へ

猫-ゆきおを見ながら「紫芋あん生どらやき 伊予むらさき」を食べた感想

次へ

【PHP】gethostbyaddrの使い方