【问题标题】:Call reference for country in GeoLite2 using PHP使用 PHP 在 GeoLite2 中调用国家/地区的参考
【发布时间】:2014-11-29 15:39:04
【问题描述】:

我正在尝试使用免费的 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 Fatal error: Call to undefined method MaxMind\Db\Reader::city() in >>)'

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

【问题讨论】:

  • 你能发布你的实际代码吗?

标签: php localization geoip maxmind


【解决方案1】:

在您包含的文件中没有定义 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. src/MaxMind中的Db文件夹复制到包含上述代码的文件所在目录。
  3. http://dev.maxmind.com/geoip/geoip2/geolite2/下载GeoLite2 Country MaxMind DB
  4. 解压下载的gzip,将GeoLite2-Country.mmdb文件复制到上述代码所在目录下。
  5. 您现在应该可以运行上面的代码了!只需确保将 ##.###.##.### 替换为真实 IP。

【讨论】:

  • 哇,非常感谢!我知道它必须是相对简单的东西,并且尝试过类似的东西,但缺少'names'和'en'参数。再次感谢,我的头痛现在消失了!! :) 如果你碰巧知道任何可以让它处理得更快一点的技巧,我很想听听。
  • @Mark 它对我来说运行得非常快(0.0017 秒,如果包括加载数据库,则为 0.0047 秒)。对你来说慢吗?
  • 我运行它的前几次,页面加载大约需要 5 秒....但是在看到您的消息后,我在不同的浏览器中再次尝试了多次并且它有所有这些时间都很快。可能只是我自己的互联网的一个暂时问题,因为我对它现在的速度感到满意! ...我将其用作链接重定向的一部分(用户单击链接,然后根据其位置重定向到该站点的本地化版本,这就是为什么起初我担心它似乎有点慢。再次感谢您抽出宝贵时间!
【解决方案2】:

这是一个简单的方法。首先,您必须在 MySQL 中插入用户 IP。然后你必须运行 fetch 查询,像这样

//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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多