当前位置: 首页 > 图文教程 > 网络编程 > PHP > 如何使用PHP和PEAR的Net:Geo定位用户

PHP
php 多线程上下文中安全写文件实现代码
PHP类的使用 实例代码讲解
用php实现让页面只能被百度gogole蜘蛛访问的方法
php 学习笔记
PHP编程过程中需要了解的this,self,parent的区别
php 操作excel文件的方法小结
使用PHP获取网络文件的实现代码
PHP 巧用数组降低程序的时间复杂度
php下将XML转换为数组
php 文件上传代码(限制jpg文件)
php 无极分类(递归)实现代码
PHP 采集获取指定网址的内容
PHP 将图片按创建时间进行分类存储的实现代码
PHP 存储文本换行实现方法
PHP 批量更新网页内容实现代码
用PHP查询搜索引擎排名位置的代码
用php实现的获取网页中的图片并保存到本地的代码
php实现首页链接查询 友情链接检查的代码
处理php自动反斜杠的函数代码
php实现的遍历文件夹下所有文件,编辑删除

如何使用PHP和PEAR的Net:Geo定位用户


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 33 ::
收藏到网摘: n/a

没有疑惑过像Google和Yahoo!这样的网站是如何总能知道你所在的国家,并自动地把你引导到最合适的国家子网站上?抑或是有些Web网站如何能够根据你所在的城市和地区有针对性地显示广告?嗯,这并不是魔术——这些网站只不过是把你的IP地址映射到了一个能够识别你所处位置的地理数据库里,然后利用这些信息向你发送针对性极强的数据。

但是这一特性最酷的地方却不是技术。事实是,即使是小型的Web网站所有者和开发人员都能够获得并使用这项技术,只要他们了解一点PHP和HTML的知识就行了。这就是本文的目的。我将向你介绍一些简单的工具,你可以利用它们在自己的Web网站上实现地理定位的特性。

安装

这项工作的第一步是安装所有必需的程序。我假定你已经安装好了PHP和Apache,所以你要首先安装PEAR的Net_GeoIP程序包。这个程序包提供了一个面向对象的框架,用来通过IP地址获得地理信息。你可以直接从Web网站上安装这个工具包,也可以按照提示法通过下载来安装。

一旦你安装好了这个程序包,下一步就是下载和安装免费的MaxMind国家数据库了。这个数据库含有一个巨大的、与各个国家和地区对应的IP地址列表,并为我们在下一部分里将要编写的地理位置代码提供基础。这个数据库只有二进制格式的,而且是Net_GeoIP程序包必需的。

你要确保Net_GeoIP类文件和MaxMind库数据库文件都位于Web服务器文档的根目录下,而且能够被Web服务器的用户读取。

注意:MaxMind提供了商业和自由两个版本的数据库。两种版本的许可证条款和使用限制是不一样的。在文本里,自由版本已经够用;但是,如果你的应用程序需要极其精确的地理位置,你就应该考虑购买商业解决方案。要记住,在你的Web网站上使用这两个版本之前仔细阅读一下许可证条款,以确保你遵照上面的要求。

基本用法
所有的软件都安装好了,那么就让我们来看一个简单的地理定位的例子吧。用下面的代码创建一个简单的PHP脚本(列表A):

列表A
<?php
// include class
include("GeoIP.php");

// initialize object
// open database
$geo = Net_GeoIP::getInstance("GeoIP.dat");

// look up IP address
$country = $geo->lookupCountryName("216.239.115.148");
echo "IP mapped to: " . $country;

// close database
$geo->close();

// acknowledgement, required by MaxMind
echo "This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/."
?>

首先,getInstance()这个静态方法被用来初始化Net_GeoIP类的一个新实例。这个方法必须被传递给MaxMind二进制数据库文件。一旦建立了这种关系,一个将IP地址作为参数的lookupCountryName()方法就被调用。正如其名,这个方法会在MaxMind数据库文件里查找IP地址,然后返回对应的国家代码。在调用close()关闭数据库连接之后,国家名字就被显示在页面上。
上面的几个步骤是一个相当标准的过程,你会在下面所有的代码里看到它们。下面就是一个输出结果的例子:

IP mapped to: United States

如果你得到的只有域名,而不是国家名——只要使用本机PHP的gethostbyname()函数,就能获得对应的IP地址。列表B显示了如何实现这一目的(输出的结果和上一个脚本的输出结果相同):

列表B
<?php
// include class
include("GeoIP.php");

// initialize object
// open database
$geo = Net_GeoIP::getInstance("GeoIP.dat");

// look up IP address
$country = $geo->lookupCountryName(gethostbyname("www.techrepublic.com"));
echo "IP mapped to: " . $country;

// close database
$geo->close();

// acknowledgement, required by MaxMind
echo "This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/."
?>

如果你更习惯使用两个字母的国家代码(名字缩写)而不是具体的名字,那么你可以使用Net_GeoIP(列表C):

列表C
<?php
// include class
include("GeoIP.php");

// initialize object
// open database
$geo = Net_GeoIP::getInstance("GeoIP.dat");

// look up IP address
$code = $geo->lookupCountryCode("216.239.115.148");
echo "IP mapped to: " . $code;

// close database
$geo->close();

// acknowledgement, required by MaxMind
echo "This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/."
?>

输出的结果是:

IP mapped to: US

针对地理位置的广告

既然你已经了解了基本的