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

Vimeen

Vimeen

2016-01-29 13:26

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

没有疑惑过像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网站上使用这两个版本之前仔细阅读一下许可证条款,以确保你遵照上面的要求。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/php/)

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

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/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

针对地理位置的广告

既然你已经了解了基本的

展开更多 50%)
分享

猜你喜欢

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

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

如何使用PHP和PEAR进行不同时区的转换

PHP
如何使用PHP和PEAR进行不同时区的转换

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用Pear加速PHP程序开发

PHP
用Pear加速PHP程序开发

使用PHP批量生成随机用户名

PHP
使用PHP批量生成随机用户名

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何获取和使用网站的用户信息

平面设计 海报设计 广告设计 画报设计 签名设计 服装设计 名片设计 画册设计 版式设计 商标设计
如何获取和使用网站的用户信息

使用PHP往Windows系统中添加用户

PHP
使用PHP往Windows系统中添加用户

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

C#陷阱int i = 10; i += i++; i =

C#陷阱int i = 10; i += i++; i =

PSV《山脊赛车》奖杯一览

PSV《山脊赛车》奖杯一览
下拉加载更多内容 ↓