澳门新浦京娱乐游戏php使用GeoIP库实例

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

GeoIP介绍: 什么是GepIP ? 所谓GeoIP,就是通过来访者的IP,
定位他的经纬度,国家/地区,省市,甚至街道等位置信息。这里面的技术不算难题,关键在于有个精准
的数据库。有了准确的数据源就奇货可居赚点小钱,可是发扬合作精神,集体贡献众人享用是我们追求的。
GeoIP如何使用?
首先我们需要数据信息,所以先获取一个免费的数据库:GeoIP.dat.gz
,接着解压得到:GeoIP.dat,
然后就是对数据文件的按需操作,这边范例使用的是PHP。 GeoIP +
PHP的使用
方法一: 下载 GeoIP 的 PHP 文件geoip.inc。打包下载 复制代码 代码如下: include; // 打开数据文件 $gi
= geoip_open(“GeoIP.dat”,GEOIP_STANDARD); // 获取国家代码
$country_code = geoip_country_code_by_addr($gi,
$_SERVER[‘REMOTE_ADDR’]); echo “Your country code is: $country_code
“; // 获取国家名称 $country_name = geoip_country_name_by_addr($gi,
$_SERVER[‘REMOTE_ADDR’]); echo “Your country name is: $country_name
“; // 关闭文件 geoip_close; 注:在本地测试的话因
为$_SERVER[‘REMOTE_ADDR’]和$_SERVER[‘REMOTE_ADDR’]可能是127.0.0.1,所
以输出的内容为空。可以自己带入IP测试 方法二: 把 GeoIP 安装成 PHP 扩展
yum install GeoIP GeoIP-data GeoIP-devel 下载 GeoIP 数据库 wget

gzip -d GeoLiteCity.dat.gz mv GeoLiteCity.dat
/var/lib/GeoIP/GeoIPCity.dat 下载 GeoIP 的 PECL 扩展 下载地址
wget -c
tar -zxvf geoip-1.0.7.tgz 安 装
GeoIP 的 PECL 扩展 cd geoip-1.0.7 /usr/local/php/bin/phpize ./configure
–with-php-config=/usr/local/php/bin/php-config –with-geoip make make
install 在 php.ini 里加上 extension=geoip.so 接着重启一下 php 就行了
现在,你可以使用 php 手册里的 GeoIP 部份函数了

需要注意的是maxmind是geoip数据库的提供方,
同时也提供了很多语言的sample和api说明文档。
比如php,和php的geoip库是有很大区别的,包含使用方式,接口函数。
php官方的geoip需要配置php环境,加载geoip.dll库,并在php.ini中指定GEOIP库地址。
maxmind提供一系列 .inc 和 .php
对环境无依赖,只要支持php,直接require后即可使用。

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

**一、GEOIP数据库

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

**
细分到国家:GeoLite Country
细分到城市:GeoLite City

起步

二、php官方geoip.dll库

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

下载dll
修改php.ini,启用geoip库:
复制代码
代码如下:extension=php_geoip.dll
追加geoip段,指定数据库位置:
复制代码 代码如下:[geoip]
geoip.custom_directory = “D:php5.3geo”

代码列表A

测试代码

?php

注意geoip.dll中使用的 GeoIPCity.dat 即
GeoLiteCity.dat,用的时候注意看提示
复制代码 代码如下:
echo geoip_country_name_by_name( “8.8.8.8” ) . “n”;
print_r( geoip_record_by_name( “8.8.8.8” ) );
echo geoip_country_name_by_name( “61.139.2.69” ). “n”;
print_r( geoip_record_by_name(  “61.139.2.69” ) );

// include functions

三、MaxMind官方php文件函数库

include(“geoip.inc”);

文档和示例:
修改maxmind示例中 sample.php 和 sample_city.php 中
GeoIP.dat/GeoLiteCity.dat 路径为你自己的路径
同一目录用 “./GeoIP.dat” 或 “./GeoLiteCity.dat” 即可。
详细到国家
复制代码 代码如下:
include(“geoip.inc”);
$gi = geoip_open( “./GeoIP.dat”, GEOIP_STANDARD );
echo geoip_country_code_by_addr($gi, “8.8.8.8”) . “t” .
geoip_country_name_by_addr($gi, “8.8.8.8”) . “n”;
echo geoip_country_code_by_addr($gi, “61.139.2.69”) . “t” .
geoip_country_name_by_addr($gi, “61.139.2.69”) . “n”;
geoip_close($gi);

// read GeoIP database

详细到国家城市

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

复制代码 代码如下:
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);

// 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//

geoip_close($handle);

// print compulsory license notice

echo “p — This product includes GeoIP data created by MaxMind,
available from –“;

?

列表A中的代码显示了使用模块以访问GeoIP免费国家信息数据库的基本方法。示例假设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()关闭数据库文件。

所做的就是这么简单。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图