YiluPHP
这家伙很懒,什么都没有留下...

经验 PHP根据IP获得国家地区,GeoIP的使用 - PHP版

浏览数 213681

GeoIP介绍:

什么是GepIP ?

所谓GeoIP,就是通过来访者的IP, 定位他的经纬度,国家/地区,省市,甚至街道等位置信息。这里面的技术不算难题,关键在于有个精准 的数据库。有了准确的数据源就奇货可居赚点小钱,可是发扬合作精神,集体贡献众人享用是我们追求的。

 

GeoIP如 何使用?

首先我们需要数据信息,所以先获取一个免费的数据库:https://sjolzy.cn/php/GeoIP/bak/GeoIP.dat.gz ,接着解压得到:GeoIP.dat, 然后就是对数据文件的按需操作,这边范例使用的是PHP。

 

GeoIP + PHP的使用

方法一:

下载 GeoIP 的 PHP 文件geoip.inc,保存为 geoip.inc.php

https://sjolzy.cn/php/GeoIP/bak/geoip.inc

php使用代码


include("geoip.inc.php");

// 打开数据文件
$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($gi);

注:在本地测试的话因 为$_SERVER['REMOTE_ADDR']和$_SERVER['REMOTE_ADDR']可能是127.0.0.1,所 以输出的内容为空。可以自己带入IP测试

实例文件下载: http://www.weinidai.com/sources/download/GeoIP.rar


方法二:

把 GeoIP 安装成 PHP 扩展
yum install GeoIP GeoIP-data GeoIP-devel

 

下载 GeoIP 数据库
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gzip -d GeoLiteCity.dat.gz
mv GeoLiteCity.dat /var/lib/GeoIP/GeoIPCity.dat

 

下载 GeoIP 的 PECL 扩展
下载地址 http://pecl.php.net/package/geoip
wget -c http://pecl.php.net/get/geoip-1.0.7.tgz
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 部份函数了
http://cn.php.net/manual/en/book.geoip.php

 

本 文地址://sjolzy.cn/post-612.html

本文永久地址:https://sjolzy.cn/GeoIP-PHP-version-use.html


=================================


第一种方法:
下载PHP的GEO_IP拓展安装,直接就能用里面的函数。
方法简单,我就不多说。
第二种方法:
下载配置文件和IP数据库,PHP调用。
所需文件下载:http://yunpan.cn/csVXAGsHBuCSj (提取码:0c7c)
放到同目录下,建立PHP文件:

  1. function geo_ip($ip){
  2.         include_once("geoipcity.inc");
  3.         include_once("geoipregionvars.php");
  4.         $gi = geoip_open("GeoLiteCity.dat",GEOIP_STANDARD);   //调用MaxMind IP数据
  5.         $record = geoip_record_by_addr($gi,$ip);
  6.         $arr = Array(
  7.                 "国家代码" => $record->country_code,
  8.                 "国家" => $record->country_name,
  9.                 "地区" => $GEOIP_REGION_NAME[$record->country_code][$record->region],
  10.                 "城市" => $record->city,
  11.                 "邮政编码" => $record->postal_code,
  12.                 "经纬度" => $record->longitude.", ".$record->latitude,
  13.                 "区域" => $record->continent_code
  14.                 );
  15.         $newarr = array_filter($arr);
  16.         foreach($newarr as $key => $value){
  17.                 echo $key." => ".$value.'
    ';
  18.         }
  19. }

  20. geo_ip("8.8.8.8");

 

我用的是国外MaxMind 免费下载的IP数据,已经包含了IP的经纬度信息,并且准确率也还行。而国内的纯真IP数据库并没有包含经纬度信息。
当然,MaxMind还有一个精确率更高的数据库,不过是收费版本!(#‵′)凸
有兴趣的童鞋也可以自行调用Google Map API获得IP 所在地地图,我就不继续演示了 :)
我来说说