PHP 脚本混淆 GEO Lite DB

标签 php mysql ip

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

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

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

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

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

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

目前我的IP是:180.211.255.204

所以,我认为数据库可能没有更新。

但是当我尝试使用该网站演示测试相同的 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";

提前致谢

最佳答案

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

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

  • 您还可以尝试使用 GeoLite2 数据库,您可以在此处找到该数据库。

  • 您应该尝试 maxmind 提供的 php 扩展,而不是执行 sql 查询,因为它可能要快得多。有关如何使用此扩展的说明可以在这里找到:http://maxmind.github.io/GeoIP2-php/

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

    关于PHP 脚本混淆 GEO Lite DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28184931/

    相关文章:

    php - Laravel 7 自定义身份验证不起作用

    php - 条形码无法读取mysql中的行

    php - 翻译算法

    PHP PDO 更新有 2 个表

    python - Django:在数据库错误中获取最近插入的特定字段值:需要超过 1 个值才能解包

    c# - 将字符串值与导入的 Excel 电子表格中的值匹配

    networking - 在 Haskell 中列出网络接口(interface)

    php - 创建动态 .htaccess 禁令时出现问题

    c++ - 有没有办法检查端口号的可用性?

    php - 如何使用排序结果作为另一种MySQL语法的“ORDER BY”基础?