以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

PEARのNet_GeoIPを使ってみた

何気にMonacoinとの通信実験プログラムにPEARNet_GeoIPを使ってみたのでメモ。
IPから国名を導き出すライブラリ。
なお、GeoIPはPECLにもある。PECLの方が若干動作早い(と思う)し高機能だがここはお手軽なPEARを使ってみる。一応普通の共有サーバーを使ってる人にも対応する書き方で。

インストール

PEARのサイトからパッケージをダウンロードして解凍するか、pearコマンドなら

# pear install Net_GeoIP

でいける。が、GeoIPデータがないと動かないので次にMaxMind社のページから最新のGeoIPデータもダウンロード、解凍して適当なところに置いておく。
OSにインストールされていればそれ*1も利用できるが一部のディストリビューションのパッケージで配布されているものはデータが古い場合もあるのでここでは使わない。
なお、IPv6版やGeoLiteCity、GeoLiteASNはここでは不要*2

$ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
$ gunzip GeoIP.dat.gz

使ってみる

IPから国名を導き出してみる。PEAR版の場合はIP以外の文字列を渡しても動作しないので注意。

<?php
require_once("Net/GeoIP.php");
$geoip = Net_GeoIP::getInstance("/path/to/GeoIP.dat",Net_GeoIP::MEMORY_CACHE);
$ip = "93.184.216.119"; //example.comのIP
echo "IP: $ip\n";
echo "CountryName: " . $geoip->lookupCountryName($ip) . "\n";
echo "CountryCode: " . $geoip->lookupCountryCode($ip) . "\n";
?>
IP: 93.184.216.119
CountryName: United States
CountryCode: US

簡単でしょ?

蛇足

  • 毎日ブログ投稿がいつまで続くやら。
  • どこにでもあるよーな記事です。本当にありがとうございました。

*1:CentOSとかだと/usr/share/GeoIP/GeoIP.datにある

*2:IPv6版は非対応。GeoLiteCityは都市のデータが入っていてNet_GeoIPにも関数があるが無料版のためPEARのNet_GeoIPでは利用できない(PECLのGeoIPでは利用できる)。