专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » phppear:用PHP和PEAR的Net_GeoIP定位用户 »正文

phppear:用PHP和PEAR的Net_GeoIP定位用户

来源: 发布时间:星期一, 2009年1月12日 浏览:24次 评论:0
  没有疑惑过像Google和Yahoo!这样网站WebSite是如何总能知道你所在国家并自动地把你引导到最合适国家子网站WebSite上?抑或是有些Web网站WebSite如何能够根据你所在城市和地区有针对性地显示广告?嗯这并不是魔术——这些网站WebSite只不过是把你IP地址映射到了个能够识别你所处位置地理数据库里然后利用这些信息向你发送针对性极强数据

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

  安装

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

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

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

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

  基本使用方法

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

  列表A

<?php
//
("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 s GeoLite data created by MaxMind, available from http://www.maxmind.com/."
?>


  首先getInstance这个静态思路方法被用来化Net_GeoIP类个新例子这个思路方法必须被传递给MaxMind 2进制数据库文件旦建立了这种关系个将IP地址作为参数lookupCountryName思路方法就被正如其名这个思路方法会在MaxMind数据库文件里查找IP地址然后返回对应国家代码close关闭数据库连接的后国家名字就被显示在页面上

  上面几个步骤是个相当标准过程你会在下面所有代码里看到它们下面就是个输出结果例子:

  IP mapped to: United States

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

  列表B

<?php
//
("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 s GeoLite data created by MaxMind, available from http://www.maxmind.com/."
?>


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

  列表C

<?php
//
("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 s GeoLite data created by MaxMind, available from http://www.maxmind.com/."
?>


  输出结果是:

  IP mapped to: US

  针对地理位置广告

  既然你已经了解了基本知识下面就让我们来看个真正应用:个能够根据用户当前所在地理位置显示广告条简单脚本首先创建个含有广告条目录结构并保证每个目录名和标准双字母国家代码相对应就像下面这样:

  images/

       US/

       GB/

       IN/

       ..

  在每个目录下放置个针对该国家广告条图片你想要有多少广告图片都可以(在这个例子里我假设有10个)但是这个数量应该在每个国家的间保持

  然后在顶级目录下创建下面PHP脚本(列表D):

  列表D

<html>
<head></head>
<body>
<p align="center">
<?php
//
("GeoIP.php");
// initialize object
// open database
$geo = Net_GeoIP::getInstance("GeoIP.dat");
// look up IP address
$code = $geo->lookupCountryCode($_SERVER['REMOTE_ADDR']);
// generate random banner number between 1 and 10
$img = sprf("%03d", rand(1,10));
// retrieve localized banner image and display
echo "<img border=1 src="images/$code/$img.g">";
// close database
$geo->close;
?>
</p>
-- Page body here --
This product s GeoLite data created by MaxMind, available from http://www.maxmind.com/.
</body>
</html>




  这个脚本负责识别客户端当前位置并随机显示个广告条但是要注意和先前使用IP地址例子区别在本文里客户端IP地址是通过专用PHP环境变量$_SERVER['REMOTE_ADDR']取回这个地址然后被lookupCountryCode思路方法用来识别客户端国家和双字母国家代码然后rand被用来随机生成个在1到10的间数字对应广告条图片就被从国家目录里取回并用个<img ... />标记显示出来最后数据库连接通过close被关闭

  尽管这个脚本还很初级但是它应该能够介绍说明针对地理位置广告基本原理用它如果你有些有意思使用方法别忘了告诉我编程快乐!

  注:如果你计划在自己网站WebSite上使用这个脚本那么你需要进步改进它也许让它能够针对每个国家使用区别数量广告图片并加入业务逻辑以保证在无法确认用户所在国家情况下使用默认广告条但是这些都是不重要增补应该不会导致很大问题



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: