通过Maxmind GeoLite2 Free获取用户城市的本地化名称

Mor*_*itz 1 localization geoip maxmind

我想显示用户城市的德语名称.是否有可能免费版Maxmind Geoip?我找不到打开GeoLite2-City.mmdb或GeoLiteCity.dat的方法,以查看列出的城市,以构建我自己的翻译服务.我该怎么打开它们?

kit*_*hin 8

以下是没有Composer的方法.

更改:

require_once '../vendor/autoload.php';
use MaxMind\Db\Reader;
$reader = new Reader('GeoIP2-City.mmdb');
Run Code Online (Sandbox Code Playgroud)

至:

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= true ? 'GeoLite2-City.mmdb' : 'GeoLite2-Country.mmdb';
$reader = new Reader( __DIR__  . '/' . $mmdb );
Run Code Online (Sandbox Code Playgroud)

你需要PHP 5.3+.与使用Composer相比,您甚至可以节省一些代码和文件数量.(消除了一些测试代码,以及整个Guzzle结构.)此外,它更清楚地说明了命名空间如何在PHP中作为类的一个很好的替代(当类只用于名称间距时).

其他人benchmark.php可以丢弃并开始使用$reader->get().

如果您确实想要进行基准测试,那么在大多数平台上您需要修改rand()调用.试试这个:

更改:

$ip = long2ip(rand(0, pow(2, 32) -1));
Run Code Online (Sandbox Code Playgroud)

至:

$n= (float)mt_rand(0, pow(2, 31) - 1);
if (mt_rand(0,1)) $n+= pow(2, 31);
$ip = long2ip($n);
Run Code Online (Sandbox Code Playgroud)

或者只mt_rand(0,255)用'.' 加入四个,这可能更容易!

........................ 编辑2014/09 ...................... ..

上面添加了'Db/Reader/Util.php'.

MaxMind-DB-Reader-php版本:1.0.0(2014-09-22)

您的文件结构应如下所示:

./benchmark.php
./GeoLite2-City.mmdb
./GeoLite2-Country.mmdb
./Db/Reader.php
./Db/Reader/Decoder.php
./Db/Reader/InvalidDatabaseException.php
./Db/Reader/Metadata.php
./Db/Reader/Util.php
Run Code Online (Sandbox Code Playgroud)