【问题标题】:PHP Script Confusing GEO Lite DB混淆 GEO Lite DB 的 PHP 脚本
【发布时间】:2015-03-26 22:05:56
【问题描述】:

我需要从用户 ip 获取国家名称。据我所知,可以通过两种方式完成:

  1. 调用第三方 api(但这可能会很慢)
  2. 使用自己的数据库

所以,我从以下站点下载 IP 数据库: http://dev.maxmind.com/geoip/legacy/geolite/

并在我的数据库中创建一个表,然后使用 php 脚本获取 ip,然后是国家/地区

但它不适用于我自己的国家:(

但在我检查我的 vps 时可以工作

目前我的ip是:180.211.255.204

所以,我认为可能是 db 没有更新。

但是当我尝试与该网站演示测试相同的 ip 时,它工作正常:

https://www.maxmind.com/en/geoip-demo

那么问题出在哪里?是数据库不同还是我的代码有问题?

我很困惑:(

这是我用来获取国家/地区的代码:

$strSQL="SELECT `country_name` FROM `IPCountry` WHERE INET_ATON('" . $strIP . "') BETWEEN ip_range_start_int AND ip_range_end_int LIMIT 1";

提前致谢

【问题讨论】:

  • 您使用的是最新版本的 GeoLite 数据库吗?
  • @MichaelC。是的先生,我在发布这个问题的前一天已经下载了数据库。 :(

标签: php mysql ip


【解决方案1】:

如果其他 IP 返回正确的结果,您的查询/代码可能没问题。

以下是一些需要考虑/尝试的事情: 1. Maxmind 本身(在那里演示)可能不使用他们自己的数据库的精简版,所以你得到的结果可以更准确。

  1. 你也可以试试 GeoLite2 数据库,你可以在这里找到。

  2. 您应该尝试使用 maxmind 提供的 php-extension,而不是执行 sql-queries,因为它可能会快很多。可以在此处找到有关如何使用此扩展程序的说明:http://maxmind.github.io/GeoIP2-php/

顺便说一句。我自己使用 geolite2 数据库,它返回“Bangladesh”作为您提供的 IP 的国家。 (见:http://geoip.nekudo.com/api/180.211.255.204

【讨论】:

  • 先生,您是否像我一样在您的服务器上使用了相同的数据库?如果是这样,你能分享你使用的代码吗?我认为你没有使用与我相同的数据库或我使用的相同代码?任何帮助将不胜感激:)
  • 源代码在这里可用:github.com/nekudo/shiny_geoip 我使用 GeoLite2 City 数据库,它在这里可用:dev.maxmind.com/geoip/geoip2/geolite2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
相关资源
最近更新 更多