使用PHP在GeoLite2中调用国家/地区的参考

时间:2014-10-04 23:46:59

标签: php localization geoip maxmind

我尝试使用免费的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()in<<< christian.php>>>)'

的路径

非常感谢任何想法/建议。

2 个答案:

答案 0 :(得分: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
  2. 下载MaxMind-DB-Reader-php
  3. Db中找到的src/MaxMind文件夹复制到包含上述代码的文件的目录中。
  4. http://dev.maxmind.com/geoip/geoip2/geolite2/
  5. 下载GeoLite2国家/地区MaxMind数据库
  6. 解压缩下载的gzip并将GeoLite2-Country.mmdb文件复制到与包含上述代码的文件相同的目录中。
  7. 您现在应该可以运行上面的代码了!只需确保使用真实IP替换##.###.##.###

答案 1 :(得分: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;