【PHP】gethostbynameとgethostbynamelの違い
PHP関数のgethostbynameとgethostbynamelを使用すると、ホスト名の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 -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 -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となる。