【PHP】IPアドレスからホスト名を取得する方法

公開日:
更新日:
カテゴリー: PHP

PHPを使ってIPアドレスからホスト名を取得する方法を書いています。

1.gethostbyaddr関数を使う

IPアドレスからホスト名を取得する方法はとても簡単で、gethostbyaddr関数を使うだけです。

この関数は、指定したIPアドレスに対応するインターネットホスト名を取得してくれる関数です。

gethostbyaddr("ここにIPアドレス");

成功した場合はホスト名を、失敗した場合はそのままのIPアドレスを、IPアドレスの入力ミスであればfalseが返されます。

2.IPアドレスの形式をチェック

gethostbyaddr関数を使えばホスト名を取得できますが、関数を実行する前にIPアドレスの形式をチェックすればいろいろといいと思います。

その方法は、次のように正規表現を用いてpreg_match関数でチェックするだけです。

preg_match("/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/", $ip_address);

IPアドレスの形式は、0から9の数字が1桁から3桁、それがピリオドを挟んで4つ続くので上のような正規表現でチェックが可能です。

3.IPアドレスからホスト名を取得するプログラム

上記の事をまとめると、次のようなプログラムが書けると思います。

<?php
//IPアドレス
$ip_address = "0.0.0.0";

//IPアドレスの形式をチェック
if(preg_match("/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/", $ip_address)){
	//出力
	echo gethostbyaddr($ip_address);
}else{
	//エラー出力
	echo "IPアドレスの入力にミスがあります";
}
?>

このプログラムでは、IPアドレスに「000.000.000.000」を指定すると、

 Warning: gethostbyaddr(): Address is not a valid IPv4 or IPv6 address in ***

 という警告が出るので、このエラー回避をするために次のように数字の絶対値を取得できるabs関数を使ってゼロサプレスすると良いです。

<?php
//IPアドレス
$ip_address = "000.000.000.000";
//IPアドレスの形式をチェック
if(preg_match("/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/", $ip_address, $matches)){
	//ゼロサプレス
	$ip_address = abs($matches[1]) . "." . abs($matches[2]) . "." . abs($matches[3]) . "." . abs($matches[4]);
	//出力
	echo gethostbyaddr($ip_address);
}else{
	//エラー出力
	echo "IPアドレスの入力にミスがあります";
}
?>

 

あわせて読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント