PHPでIPアドレスを取得する:$_SERVER変数, gethostbyname

IPアドレスは、セキュリティ対策やサイト閲覧者の同一性を確認するための一要素として使われている情報です。今回はPHPでIPアドレスを取得する方法を説明します。

サイト閲覧者のIPアドレスを取得する

PHPでは、サイト閲覧者のIPアドレスは、スーパーグローバル変数$_SERVERの連想配列である$_SERVER['REMOTE_ADDR']にあります。

関数などを使わずに$_SERVER変数を扱うことでIPアドレスを簡単に取得できます。

サンプルコード

以下はIPアドレスを表示するサンプルです。

echo $_SERVER['REMOTE_ADDR'];

ビルトイン・ウェブサーバーを使って動作確認

動作を確認するため、PHPのビルトイン・ウェブサーバーを利用します。

事前にサンプルコードをsample.phpとして/var/www/htmlに保存しておくとします。

$ cd /var/www/html
$ php -S localhost:80 #(-Sは大文字です)

ブラウザーでhttp://localhost/sample.php を開くと、次のようなIPアドレスが表示されます。

127.0.0.1

もしPHPを使えるレンタルサーバーがあれば、そこに上記サンプルPHPをアップロードしてアクセスしてみてください。プロバイダーによって異なるIPアドレスが表示されます。

ドメイン名からIPアドレスを取得する

上記では、アクセスした閲覧者のIPアドレスを取得しましたが、ドメイン名からIPアドレスを取得することもできます。

$ip = gethostbyname("uxmilk.jp") ;
var_dump($ip);
//実行結果:string(13) "160.16.240.11"

IPアドレスをドメイン名に変換する

また取得したIPアドレスは、gethostbyaddr関数を使うことによってドメイン名に変換することができます。

IPアドレスを数値に変換する

取得したドット形式のIPアドレスはip2long関数を使うことでIPv4インターネットアドレスに変換することができます。変換すると、数値型になるのでデータベースに保存する時などに便利です。

var_dump(ip2long($_SERVER['REMOTE_ADDR']));
//実行結果:int(2685464587)

変換したIPv4アドレスは、long2ip関数で元のドット表記のIPアドレスに変換することができます。

var_dump(long2ip(2685464587));
//実行結果:string(13) "160.16.240.11"

補足:IPアドレスの同一性について

多くの場合、同一IPアドレスは同一ユーザーということになりますが、ビルやマンションからのインターネット利用では個人を区別できない場合もあります。

また、最近ではWi-Fiを使ってインターネット接続するケースが多く、同じWi-Fiにアクセスすると基本的に同一IPアドレスになります。

そのため、個人識別には不完全な情報ですので、利用する場合は気をつけてください。


イベント

2017/12/05(火)
Design Thinking Square