仅在美国境内使用GeoIP不是100%准确

时间:2013-01-17 16:39:48

标签: geoip

我有一个使用GeoIP数据库的模块。我用它来获取访问网站的用户的位置,我们可以提供他们从YQL天气拉出的城市(仅美国)的当前天气。我发现这个https://stackoverflow.com/questions/12365078/best-way-to-get-location-weather-details-accurately在没有让用户输入他们的位置的情况下读取的内容不会非常准确。

到目前为止,已经有90%成功显示正确的位置,有时我们必须续订DHCP租约以获得正确的位置......但我的客户仍然无法在他们的办公室拉出正确的城市。我对他们的网络连接并不是很了解,但我想知道它是否正在转发等等......

以下是我在模块上获取用户IP的方法:

function getIpAddresses() {
   $ipAddresses = array();
   if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {

  $ipAddresses['proxy'] = isset($_SERVER["HTTP_CLIENT_IP"]) ? $_SERVER["HTTP_CLIENT_IP"] : $_SERVER["REMOTE_ADDR"];
  $ipAddresses['user'] = $_SERVER["HTTP_X_FORWARDED_FOR"];

  } else {
  $ipAddresses['user'] = isset($_SERVER["HTTP_CLIENT_IP"]) ? $_SERVER["HTTP_CLIENT_IP"] : $_SERVER["REMOTE_ADDR"];
  }
   return $ipAddresses;
  }

有没有更好的方法来获取IP /提高准确性而无需请求用户输入其位置? 谢谢!

1 个答案:

答案 0 :(得分:1)

您有几个选择:

  • 寻找更好的GeoIP数据提供商。有几个免费的数据提供者,根据我的经验,他们在国家级别的事情上非常擅长,因为你需要更精细地看待商业解决方案。
  • 记录他们所处的IP,即使他们正在更新他们的IP,他们可能会在特定的子网中徘徊。子网到正确位置的硬编码。
  • 合并javascript位置API,并将该数据发送到服务器。如果客户端计算机是笔记本电脑,它可能提供比简单的GeoIP更好的位置信息。