使用PHP调用GeoLite2中国家的参考

问题描述 投票:2回答:2

我正在尝试使用免费的MaxMind GeoLite2代码来确定特定IP地址的国家/地区。

我使用的是此处发布的无Composer的方法:Get a localized name of the users city via Maxmind GeoLite2 Free

我确信它非常简单,但是我不知道如何实际通过IP地址并将其返回国家。

$reader = new Reader...行之后,我有$place = $reader->country('##.###.##.###');(其中#是实际的IP地址编号),它不起作用。我试图用“城市”代替“国家”,但那也不起作用。我确定它很简单,只是不确定要返回该国家需要使用哪些参数。

错误日志中显示的错误是'PHP致命错误:在<<>>的路径中调用未定义的方法MaxMind \ Db \ Reader :: city()'

任何想法/建议将不胜感激。

php localization geoip maxmind
2个回答
6
投票

要包含的文件中没有定义city()country()函数(基于链接的答案。)相反,应该使用get()获取IP地理信息,例如:

require_once __DIR__ . '/' . 'Db/Reader.php';
require_once __DIR__ . '/' . 'Db/Reader/Decoder.php';
require_once __DIR__ . '/' . 'Db/Reader/InvalidDatabaseException.php';
require_once __DIR__ . '/' . 'Db/Reader/Metadata.php';
require_once __DIR__ . '/' . 'Db/Reader/Util.php';     // new 2014/09
use MaxMind\Db\Reader;
$mmdb= 'GeoLite2-Country.mmdb';
$reader = new Reader( __DIR__  . '/' . $mmdb );
$ipData = $reader->get('##.###.##.###');
echo $ipData['country']['names']['en'];

##.###.##.###替换为要获取其信息的IP。显然,这需要您具有所有必需的代码文件,并且GeoLite2-Country.mmdb

因此完整的步骤将是:

  1. [从https://github.com/maxmind/MaxMind-DB-Reader-php下载MaxMind-DB-Reader-php
  2. 将包含在上面代码的文件复制到Db中的src/MaxMind文件夹到目录中。
  3. http://dev.maxmind.com/geoip/geoip2/geolite2/下载GeoLite2 Country MaxMind数据库
  4. 解压缩下载的gzip并将GeoLite2-Country.mmdb文件复制到与包含上述代码的文件相同的目录。
  5. 您现在应该可以运行上面的代码!只需确保将##.###.##.###替换为真实IP即可。

0
投票

这是一种简单的方法。首先,您必须在MySQL中插入用户IP。然后,您必须运行提取查询,类似这样]

//database connect or includ database php file

//user_ip detect

$geo = json_decode(file_get_contents("http://extreme-ip-lookup.com/json/$user_ip")); 
$country = $geo->country; 
$city = $geo->city; 
$ipType = $geo->ipType; 
$businessName = $geo->businessName; 
$businessWebsite = $geo->businessWebsite; 
echo "Location of $user_ip: $city, $country\n"; 
echo $ip_address;
© www.soinside.com 2019 - 2024. All rights reserved.