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 已安装/已加载,但未返回记录的主要内容,如果未能解决你的问题,请参考以下文章
Apache 无法启动 - 表示 httpd 模块已加载但未运行