PECL :: Package :: geoip
IPアドレスから国や地域を取得するのに利用できるPECLのGeoIP関数がstableになった。
以前にも使っていた時期があったけれども、かなり放置していたので、もう一度最初から入れなおしてみた。ということで、インストール手順などをメモ。
詳しくは、PHP: GeoIP 関数 – Manualを参考に。
$ cd ~/download
$ wget http://www.maxmind.com/download/geoip/api/c/GeoIP-1.4.2.tar.gz
$ cp GeoIP-1.4.2.tar.gz /usr/local/src/
$ cd /usr/local/src
$ tar zxvf GeoIP-1.4.2.tar.gz
$ cd GeoIP-1.4.2
$ ./configure
$ make
$ sudo make install
- GeoLite Country, GeoLite City バイナリデータを配置
$ cd ~/download
$ wget http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
$ wget http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$ gunzip GeoIP.dat.gz
$ gunzip GeoLiteCity.dat.gz
$ sudo cp GeoIP.dat /usr/local/share/GeoIP/
$ sudo cp GeoLiteCity.dat /usr/local/share/GeoIP/
$ sudo mv /usr/local/share/GeoIP/GeoLiteCity.dat /usr/local/share/GeoIP/GeoIPCity.dat
$ sudo /usr/local/php/bin/pecl install channel://pecl.php.net/geoip-1.0.0
$ sudo cp /usr/local/php/lib/php/extensions/no-debug-zts-20060613/geoip.so /usr/local/php/lib/php/extensions/geoip.so
extension=geoip.so
はまりどころとしてはGeoLite Cityのファイル名をGeoLiteCity.datからGeoIPCity.datに変更しないと、データの読み込みに失敗する。あと、商用データじゃないと利用できない関数があるので注意。
実際の利用としては
<?php
$record = geoip_record_by_name('www.example.com');
print_r($record);
というコードで
Array
(
[country_code] => US
[region] => CA
[city] => Beverly Hills
[postal_code] => 90210
[latitude] => 34.099498748779
[longitude] => -118.41429901123
[dma_code] => 803
[area_code] => 310
)
というようなデータが取得できる。