【问题标题】:What's the best solution to check a users country?检查用户国家/地区的最佳解决方案是什么?
【发布时间】:2014-06-27 13:27:36
【问题描述】:

提供 API 的服务

我读到/听说有很多服务提供 API 来执行此操作,但是我真的不想依赖任何人,所以如果有没有他们的方法可以做到这一点,请告诉我。

服务器端

我还读到/听说这是在服务器端编码中完成的,这让我感到困惑,我一直认为这是由 Javascript 完成的。

IP列表

而且我还读到/听说,那些提供 API 的服务有大量来自 ISP 的 IP 列表,他们可以通过该列表确定国家/地区,这是真的吗?如果我想在没有 API 的情况下单独制作它,我也应该有一个列表吗?

【问题讨论】:

  • 你是指用户当前的地理位置吗?
  • 嗯我的意思是国家,例如美国、俄罗斯、中国等

标签: php


【解决方案1】:

当我进行查找时,我使用了这个脚本:http://www.phptutorial.info/iptocountry/the_script.html

db 是一个 php 文件列表,您可以订阅一个列表,该列表将通知您数据库更新。如果您没有数据库,这非常有用:)

【讨论】:

    【解决方案2】:

    MaxMind 提供 GeoLite Country IP 数据库,Webalizer 和 AWStats 等一些网络日志分析器也使用或支持该数据库。

    它以 CSV 格式免费提供,您可以将其导入应用程序的数据库。 他们还提供了全面的guides and examples 集合。

    【讨论】:

      【解决方案3】:

      获取用户所在国家/地区的一种简单方法是读取 HTTP_ACCEPT_LANGUAGE 标头。

      这里是一个例子(PHP):

      $langcodes=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
      $host=gethostbyaddr( $_SERVER['REMOTE_ADDR'] );
      
      if(preg_match("/(bg|bg-BG|cs|cs-CZ|da|da-DK|de|de-AT|de-CH|de-DE|de-LI|de-LU|el|el-GR|en-GB|en-IE|es-ES|et|et-EE|fi|fi-FI|fr-BE|fr-CH|fr-FR|fr-LU|fr-MC|ga|hu|hu-HU|it|it-CH|it-IT|lt|lt-LT|lv-LV|lv|mt|mt-MT|nl|nl-BE|nl-NL|pl|pl-PL|pt-PT|ro|ro-RO|sk|sl|sk-SK|sv|sv-FI|sv-SE|fr)([,;].*)?$/i",$langcodes) 
         || preg_match("/(\.ad|\.al|\.at|\.ax|\.ba|\.be|\.bg|\.by|\.ch|\.cy|\.cz|\.de|\.dk|\.ee|\.es|\.eu|\.fi|\.fo|\.fr|\.gb|\.gg|\.gi|\.gr|\.hr|\.hu|\.ie|\.im|\.is|\.it|\.je|\.li|\.lt|\.lu|\.lv|\.mc|\.md|\.me|\.mk|\.mt|\.nl|\.no|\.pl|\.pt|\.ro|\.rs|\.se|\.si|\.sk|\.sm|\.ua|\.uk|\.va)$/i", $host))
      {
          echo "European User";
      }
      else
          echo "non-European User";
      

      【讨论】:

        【解决方案4】:

        任何检查通常都通过 IP 进行,并使用一些 ipranges 数据库以及分配到哪个国家/地区。

        这在大多数情况下都有效,除非用户使用某些代理或类似的方式。

        其中大部分都需要花钱或仅可用于某些目的。

        另一个不那么可靠的解决方案是使用浏览器语言,如果您可以查询时区。

        我没有任何具体的服务可以推荐,因为它们中的大多数不允许商业用途,因此我不能使用它们;)

        【讨论】:

        • hmm 非常感谢您的回答,浏览器时区是个好主意,我不知道浏览器中存在这样的东西,但是它有多可靠?我的意思是浏览器兼容性,以及它是如何工作的?
        • 嗯,但时区的问题是同一时区有很多国家:O
        • 它不如一个好的 GeoIP 表可靠,但结合语言 + 时区至少可以提示它们可能来自哪里。这完全取决于您需要这些信息的用途以及您需要它的可靠性。
        【解决方案5】:

        这是谷歌推荐的一个解决方案(实际上是3个解决方案):

        GeoLocation by Google

        【讨论】:

        • 这是一个javascript解决方案,不是php
        猜你喜欢
        • 2020-03-18
        • 2019-07-14
        • 2020-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多