PECL :: Package :: geoip
IPアドレスから国や地域を取得するのに利用できるPECLのGeoIP関数がstableになった。
以前にも使っていた時期があったけれども、かなり放置していたので、もう一度最初から入れなおしてみた。ということで、インストール手順などをメモ。
詳しくは、PHP: GeoIP 関数 – Manualを参考に。
- GeoIP C ライブラリ
$ 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
- PECL geoip.so
$ 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
- php.ini 修正
# 追加
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 )
というようなデータが取得できる。