【问题标题】:GeoIP installed / loaded, but not returning recordsGeoIP 已安装/已加载,但未返回记录
【发布时间】:2012-08-18 12:46:34
【问题描述】:

尝试通过 GeoIP Module / MaxMind DB 对国家和地区进行地理定位。

仔细检查它是通过 phpinfo() 加载的:

 geoip
 geoip support  enabled
 geoip extension version    1.0.8
 geoip library version  1004005

仔细检查数据库:

    <?
    $db = geoip_database_info();
    print_r($db);
    ?>

返回:

GEO-106FREE 20090201 Build 1 Copyright (c) 2007 MaxMind LLC All Rights Reserved

但是当我尝试这个时:

<?
$record = geoip_record_by_name("76.109.14.196");
if ($record) {
   print_r($record);
}
?>

它变成了空白。

有没有我遗漏的部分?

【问题讨论】:

  • 成功时返回关联数组,如果地址在数据库中找不到,则返回 FALSE。 您是否尝试过其他 IP?
  • 试试这个:$details = geoip_record_by_name($_SERVER['REMOTE_ADDR']); echo $details['city'];
  • @hookman 是的,已经尝试过其他 IP。

标签: php geolocation geoip php-extension


【解决方案1】:

数据库可能已过时。为什么不使用已正确更新的远程解决方案,例如http://www.geoplugin.net/

简单示例

$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=76.109.14.196");
echo $xml->geoplugin_countryName ;

输出

 United States

【讨论】:

  • 应该提到远程解决方案比较慢,可能会宕机。
  • 您可以将其与缓存解决方案结合使用,例如 memcache 您每分钟查看多少个请求?
  • 这是一个可以接受的替代方案,但我有兴趣解决最初的问题(为了理解,也出于@hookman 列出的原因)。
【解决方案2】:

可能未安装用于位置查找的特定数据库。试试geoip_country_code_by_name,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2020-05-20
    • 2020-06-21
    • 2022-12-18
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    相关资源
    最近更新 更多