geopip 记录始终为空?
Posted
技术标签:
【中文标题】geopip 记录始终为空?【英文标题】:geopip record is always null? 【发布时间】:2011-12-12 20:58:47 【问题描述】:我可以通过当前主机访问 GeoIP.dat 文件,但我输入的每个 IP 都是空的。知道可能出了什么问题或解决问题的方法吗?我有 php 错误,但我没有看到任何错误。
这是我当前的脚本:
<?php
include('geoip.inc');
include('geoipcity.inc');
include('geoipregionvars.php');
$gi = geoip_open("GeoIP.dat", GEOIP_STANDARD);
$rsGeoData = geoip_record_by_addr($gi, $_SERVER['REMOTE_ADDR']);
echo("<pre>");
print_r($rsGeoData);
echo("</pre>");
geoip_close($gi);
?>
结果总是这样:
geoiprecord Object
(
[country_code] =>
[country_code3] =>
[country_name] =>
[region] =>
[city] =>
[postal_code] =>
[latitude] => -180
[longitude] => -180
[area_code] =>
[dma_code] =>
[metro_code] =>
[continent_code] => --
)
【问题讨论】:
取决于您的网络服务器的设置方式,$_SERVER['REMOTE_ADDR'] 可能不包含客户端的 IP 地址。尝试回显 $_SERVER['REMOTE_ADDR'] 以确保存在正确的 IP。 我想到了,并验证了它是正确的 IP。var_dump($_SERVER['REMOTE_ADDR']);
输出什么? geoip_open
和 geoip_record_by_addr
在哪里定义? GeoIP.dat
具体包含什么内容,分别是什么格式的,实际数据是什么?
@Paul,试试 var_dump(is_readable("GeoIP.dat"));以确保您具有对 dat 文件的读取权限并确保它是正确的路径。
juand:看起来它是可读的:boolean true(我最初验证我可以读取文件)这让我发疯......一切似乎都是正确的
【参考方案1】:
确保您使用的是正确版本的 GeoIP。我有这个代码,它工作正常。注意不同的数据库文件:
include("geoipcity.inc");
include("geoipregionvars.php");
$gi = geoip_open('geolitecity.dat', GEOIP_STANDARD);
$record = geoip_record_by_addr($gi, ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') ? '83.238.225.249' : $_SERVER['REMOTE_ADDR']);
geoip_close($gi);
【讨论】:
以上是关于geopip 记录始终为空?的主要内容,如果未能解决你的问题,请参考以下文章
IHttpContextAccessor HttpContext 始终为空