【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アドレスの入力にミスがあります"; } ?>
あわせて読んでほしい!
コメント
まだコメントはありません。
コメントフォーム