如何使用PHP,GeoIP和Maxmind检测国家和城市?

时间:2013-12-17 19:08:25

标签: maxmind

我想要一些小教程如何检测IP的城市或国家。我听说 MaxMind GeoIp 对它有好处。

3 个答案:

答案 0 :(得分:10)

方法1:使用在线服务

方法2:使用Maxmind GeoIP_V2

我是如何做到的:让我们说,创建一个名为“ My_Folder ”的文件夹并在其中:

  1. 创建文件夹 GeoIp2 并输入此“SRC”文件夹(download)的内容。
  2. 从“SRC”文件夹中输入 MaxMind 文件夹(download)。
  3. 地点,即 GeoLite2-Country.mmdb download)。
  4. 然后,在My_Folder中创建一个example.php文件并输入以下代码:

    $user_ip='123.123.123.123';
    
    spl_autoload_register('func888'); function func888($class){ include_once(str_replace(array('/','\\'), DIRECTORY_SEPARATOR, dirname(__file__)."/$class.php")) ;}
    use GeoIp2\Database\Reader; 
    //you can do it for "city" too.. just everywhere change phrase "country" with "city".
    try{
        $reader = new Reader(dirname(__file__)."/GeoLite2-Country.mmdb");
        $record = $reader->country($user_ip);
        $reader->close();
        $country_name =  $record->raw['country']['names']['en'];
    } catch ( GeoIp2\Exception\AddressNotFoundException $e ){    $country_name = 'not_found';  }
    
    echo $country_name;
    // RESULTS -------------- > China
    

    P.S。在https://github.com/maxmind/GeoIP2-php

    找到的其他示例

答案 1 :(得分:1)

供参考,代码应如下所示 首先下载php类包 http://www.maxmind.com/download/geoip/api/php/php-1.11.tar.gz 你需要这个文件

geoip.inc
geoipcity.inc
geoipregionvars.php

将它们放在同一目录中 获取城市和其他信息的代码是

<?php
include("geoipcity.inc");
include("geoipregionvars.php");
$ip = "144.3.87.197"; 
$gi = geoip_open("GeoLiteCity.dat",GEOIP_STANDARD);
$record= geoip_record_by_addr($gi,$ip);
echo 'City Name'.$record->city . "\n";
geoip_close($gi);
?>

答案 2 :(得分:0)

MaxMind是一家位于马萨诸塞州的数字地图公司,提供IP地址的位置数据。 [MaxMind]由Thomas“ TJ” Mather于2002年成立,总部位于沃尔瑟姆,因此这里提供了有关如何使用PHP,GeoIP和[Maxmind]来检测国家和城市的简单教程。

1)首先需要根据您的平台(例如应用程序或网络)或相应的语言使用您可以使用的IP地址。

2)然后在后端中使用任何给定的链接发出curl请求,并获得包含国家,州,城市,坐标等的完整位置数组。

import pandas as pd
from ast import literal_eval

def to_list(x):
    return literal_eval(''.join(', '.join(a.split(' ')) for a in x.split(',')))

mystr = '[[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]'

df = pd.DataFrame([{0: mystr} for i in range(5)])

df[0]
0    [[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]
1    [[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]
2    [[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]
3    [[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]
4    [[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]
Name: 0, dtype: object

# these are all string types
df[0][0]
'[[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]'


df[1] = df[0].map(to_list)

# this is now a list type
df[1][0]
[[0.0, 0.0, 0.0], [1.0, 1.0, 1.0], [1.3, 4.4, 5.5]]