php使用GeoIP库实例
需要注意的是maxmind是geoip数据库的提供方,
同时也提供了很多语言的sample和api说明文档。
比如php,和php的geoip库是有很大区别的,包含使用方式,接口函数。
php官方的geoip需要配置php环境,加载geoip.dll库,并在php.ini中指定GEOIP库地址。
maxmind提供一系列.inc和.php对环境无依赖,只要支持php,直接require后即可使用。
一、GEOIP数据库
http://dev.maxmind.com/geoip/geolite
细分到国家:GeoLiteCountry
细分到城市:GeoLiteCity
二、php官方geoip.dll库
下载dllhttp://windows.php.net/downloads/pecl/releases/geoip/1.0.8/
修改php.ini,启用geoip库:
extension=php_geoip.dll
追加geoip段,指定数据库位置:
[geoip] geoip.custom_directory="D:\php5.3\geo\"
测试代码
注意geoip.dll中使用的GeoIPCity.dat即GeoLiteCity.dat,用的时候注意看提示
echogeoip_country_name_by_name("8.8.8.8")."\n"; print_r(geoip_record_by_name("8.8.8.8")); echogeoip_country_name_by_name("61.139.2.69")."\n"; print_r(geoip_record_by_name( "61.139.2.69"));
三、MaxMind官方php文件函数库
文档和示例:http://dev.maxmind.com/geoip/downloadable
修改maxmind示例中sample.php和sample_city.php中GeoIP.dat/GeoLiteCity.dat路径为你自己的路径
同一目录用“./GeoIP.dat”或“./GeoLiteCity.dat”即可。
详细到国家
include("geoip.inc"); $gi=geoip_open("./GeoIP.dat",GEOIP_STANDARD); echogeoip_country_code_by_addr($gi,"8.8.8.8")."\t".geoip_country_name_by_addr($gi,"8.8.8.8")."\n"; echogeoip_country_code_by_addr($gi,"61.139.2.69")."\t".geoip_country_name_by_addr($gi,"61.139.2.69")."\n"; geoip_close($gi);
详细到国家城市
include("geoipcity.inc"); include("geoipregionvars.php"); $gi=geoip_open("./GeoLiteCity.dat",GEOIP_STANDARD); $record=geoip_record_by_addr($gi,"8.8.8.8"); print$record->country_code."".$record->country_code3."".$record->country_name."\n"; print$record->region."".$GEOIP_REGION_NAME[$record->country_code][$record->region]."\n"; print$record->city."\n"; print$record->postal_code."\n"; print$record->latitude."\n"; print$record->longitude."\n"; print$record->metro_code."\n"; print$record->area_code."\n"; print$record->continent_code."\n"; print"\n-----\n"; $record=geoip_record_by_addr($gi,"61.139.2.69"); print$record->country_code."".$record->country_code3."".$record->country_name."\n"; print$record->region."".$GEOIP_REGION_NAME[$record->country_code][$record->region]."\n"; print$record->city."\n"; print$record->postal_code."\n"; print$record->latitude."\n"; print$record->longitude."\n"; print$record->metro_code."\n"; print$record->area_code."\n"; print$record->continent_code."\n"; geoip_close($gi);
看自己开发环境和具体情况决定用哪种