PHPプロ!TIPS+

IPアドレスから所在地探し

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

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

  1. 1.PEARのNet_GeoIPをインストール
  2. 2.Peclの拡張モジュールをインストール
  3. 3.Apacheのモジュールとしてインストール

という3種類の方法があります。

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

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

MaxMind社のホームページ(http://www.maxmind.com/)から、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']));
?>

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

バックナンバーについて

TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。

Tipsꗗy[W 

Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)