IPアドレスから所在地を調べたいと思ったことはありませんか?今回は,IPアドレスからその場所がどこなのかPHPで調べる方法をご紹介します。

 それには,GeoIPライブラリが必要になります。PHPからこのライブラリの機能を使うには,

  1. PEARのNet_GeoIPをインストール
  2. Peclの拡張モジュールをインストール
  3. Apacheのモジュールとしてインストール
という3種類の方法があります。

 今回はPeclの拡張モジュールを使います。対象はLinux系OSになります。

1.GeoIPライブラリををインストール

 MaxMind社のホームページから,GeoIPライブラリをダウンロードし,インストールします。

cd /usr/local/src
wget http://www.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
tar xzvf GeoIP.tar.gz
cd GeoIP
./configure
make
sudo make install

2.GeoIPで使うデータを入手

 無料で利用できる国データ,町データをダウンロード,解凍し,配置します。(有料版もあります。)

GeoLite Country
wget http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
 -O /usr/local/src/
gunzip /usr/local/src/GeoIP.dat.gz
sudo cp /usr/local/src/GeoIP.dat /usr/local/share/GeoIP.dat
GeoLite City
wget http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
 -O /usr/local/src/
gunzip /usr/local/src/GeoLiteCity.dat.gz
sudo cp  /usr/local/src/GeoLiteCity.dat /usr/local/share/GeoIPCity.dat

3.Peclモジュールのインストール,設定

sudo pecl install geoip

を実行します。

 この時表示されるgeoip.soの場所を確認して下さい。

 php.iniに

extension="php/extensions/no-debug-non-zts-20060613/geoip.so"
というようにgeoip.soのパスを追加し,apacheを再起動します。

4.確認

 phpinfoを確認して,geoipの項目が表示されていれば成功です。うまくいかなかった時は,データファイルの場所,php.iniのgeoip.soの指定が間違っている可能性があります。

 GeoIP関数には何種類かあります(詳細はPHPマニュアルのGeoIP関数を見て下さい)が,一番使えそうなのがgeoip_record_by_name関数です。

 引数にホスト名やIPアドレスを指定すると,国,地域,都市名,緯度,経度などの情報を入手できます。

<?php
//ホワイトハウス
var_dump(geoip_record_by_name('whitehouse.gov'));
//東京タワー
var_dump(geoip_record_by_name('www.tokyotower.co.jp'));
//訪問者がどこから来たか
var_dump(geoip_record_by_name($_SERVER['REMOTE_ADDR']));
?>

 国しかわからなかったりということもありますが,興味がある人はぜひ使ってみて下さい。



(アシアル 牧野克俊)


この記事は,アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは,他にもPHP最新ニュースや,困ったときのQ&A掲示板,初心者向けのPHP講座など,PHP開発者をサポートする情報を掲載しています。