GeoIP 已安装/已加载,但未返回记录

Posted

技术标签:

【中文标题】GeoIP 已安装/已加载,但未返回记录【英文标题】:GeoIP installed / loaded, but not returning records 【发布时间】: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。 【参考方案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,它应该可以工作。

【讨论】:

以上是关于GeoIP 已安装/已加载,但未返回记录的主要内容,如果未能解决你的问题,请参考以下文章

已加载 PDO 和 pdo_mysql 但未找到类

安装已发布的 Office 加载项返回错误

Apache 无法启动 - 表示 httpd 模块已加载但未运行

geoip_country_by_name 返回空字符串,没有错误

查看已加载但未加载其组件

模块“.dll”已加载,但未找到入口点