使用MaxMind 根据IP地址对访问者定位


Posted in PHP onOctober 09, 2006

    有时你需要知道你的站点访问者来自哪个国家——比如如果你正打算执行针对地理区域的广告计划。本文将对此方法进行介绍。

    有时你需要知道你的站点访问者来自哪个国家——比如如果你正打算执行针对地理区域的广告计划。这正是象MaxMind's GeoIP一类的工具大显身手的地方——它可以让你从访问者的IP地址轻松获取其确切的地理位置信息。

    MaxMind提供了商业数据库和免费数据库。前者更为精确,精度可以达使用者所在城市信息一级,而后者则只能确定国家和地区。在本文中,我们将演示免费版的使用方法。如果你需要更多详细信息,比如远程客户的城市以及国家信息,你需要从MaxMind:http://www.maxmind.com购买更详细的数据库。

    起步

    要使用此软件,你必须首先下载GeoIP免费国家信息文件:http://www.maxmind.com/app/geoip_country 并将其存放于Web服务器的某个目录中。然后你需要选择数据库文件所使用的语言API。为简化整个过程,我们将使用纯粹的PHP版本以避免其他额外的配置或设置Apache组件。请记住在安装软件到Web站点前阅读软件许可证条款:http://www.maxmind.com/download/geoip/database/LICENSE.txt以确保你同意这些条款。

代码列表A

<?php

// include functions

include("geoip.inc");

// read GeoIP database

$handle = geoip_open("GeoIP.dat", GEOIP_STANDARD);

// map IP to country

echo "IP address 62.149.130.132 located in " . geoip_country_name_by_addr($handle, "62.149.130.132") . " (country code " . geoip_country_code_by_addr($handle, "62.149.130.132") . ")";

// close database handler
// www.knowsky.com

geoip_close($handle);

// print compulsory license notice

echo "<p> -- This product includes GeoIP data created by MaxMind, available from http://maxmind.com/ --";

?>

列表A中的代码显示了使用模块(geoip.inc)以访问GeoIP免费国家信息数据库(GeoIP.dat)的基本方法。示例假设PHP include和国家家信息数据库文件都在与PHP文件本身相同的目录中。如果示例与你的安装不同,则需要根据需要改变路径。

示例代码相当明了,在引入GeoIP PHP函数库后,第一步即使用geoip_open()函数打开GeoIP数据库文件。此函数接收两个参数:数据库文件路径和数据库类型。

我们然后使用由调用geoip_open()返回的句柄,由此根据所给的IP地址以获取两字母的国家代码及直观的国家名称。其中还要分别借助函数geoip_country_code_by_addr()和geoip_country_code_by_name()。二者都接收两个参数:由geoip_open()返回的句柄以及需要解析的IP地址。

一旦获得所需信息,我们通过调用geoip_close()关闭数据库文件。

所做的就是这么简单。

PHP 相关文章推荐
PHP语法速查表
Dec 06 PHP
php 三维饼图的实现代码
Sep 28 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
关于尾递归的使用详解
May 02 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
php图片的二进制转换实现方法
Dec 15 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
PHP实现linux命令tail -f
Feb 22 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
php生成HTML文件的类方法
Oct 11 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
PHP SESSION跨页面传递失败解决方案
Dec 11 PHP
Zend公司全球首推PHP认证
Oct 09 #PHP
真正面向对象编程:PHP5.01发布
Oct 09 #PHP
PHP中实现图片的锐化
Oct 09 #PHP
在Zeus Web Server中安装PHP语言支持
Oct 09 #PHP
通过对php一些服务器端特性的配置加强php的安全
Oct 09 #PHP
一个阿拉伯数字转中文数字的函数
Oct 09 #PHP
PHP与已存在的Java应用程序集成
Oct 09 #PHP
You might like
adodb与adodb_lite之比较
2006/12/31 PHP
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
JS中setTimeout()的用法详解
2013/04/14 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
python检查指定文件是否存在的方法
2015/07/06 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
Python操作Jira库常用方法解析
2020/04/10 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
英国航空官网:British Airways
2016/09/11 全球购物
简历的自荐信
2013/12/19 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
2015年医生个人工作总结
2015/04/25 职场文书