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

Mar*_*ark 2 php localization geoip maxmind

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

我正在使用此处发布的无Composer方法: 通过Maxmind GeoLite2免费获取用户城市的本地化名称

我确信它非常简单,但我无法弄清楚如何实际传递IP地址并让它返回国家.

$reader = new Reader...我拥有的行之后$place = $reader->country('##.###.##.###');(其中#是实际的IP地址编号)并且它不起作用.我尝试用"城市"取代"乡村",但也没有用.我确定它很简单,我只是不确定我需要使用什么参数才能让国家返回.

错误日志中显示的错误是'PHP致命错误:调用未定义的方法MaxMind\Db\Reader :: city()<<< path to benchmark.php >>>)'

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

All*_*ice 5

您所包含的文件中没有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'];
Run Code Online (Sandbox Code Playgroud)

在哪里替换##.###.##.###你要获取信息的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 DB
  4. 解压缩下载的gzip并将GeoLite2-Country.mmdb文件复制到与包含上述代码的文件相同的目录中.
  5. 您现在应该可以运行上面的代码了!只需确保##.###.##.###使用真实IP 替换即可.