检查用户所在国家/地区的最佳解决方案是什么?

时间:2010-11-26 16:07:51

标签: php

提供API的服务

我读/听说有很多服务可以让API做到这一点,但是我真的不想依赖任何人,所以如果有办法在没有它们的情况下让我知道。

服务器端

而且我读/听说这是在服务器端编码完成的,这使我感到困惑,我一直认为这是通过Javascript完成的。​​

IP列表

我还阅读/听说那些提供API的服务他们拥有来自ISP的非常庞大的IP列表,他们可以通过此列表确定国家,这是真的吗?如果我想在没有API的情况下单独使用它,我是否也应该有一个列表?

5 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

MaxMind提供 GeoLite国家/地区 IP数据库,某些Web日志分析器(如Webalizer和AWStats)也使用或支持该数据库。

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

答案 2 :(得分:2)

获取用户所在国家/地区的简便方法是阅读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";

答案 3 :(得分:1)

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

除非用户使用某些代理或喜欢,否则这在大多数情况下都适用。

其中大部分都是花钱或只能用于某些目的。

另一个解决方案但不可靠的是使用浏览器langugae,如果你可以查询时区,也可能。

我没有任何特定服务可供推荐,因为大多数服务不允许商业用途,因此我不能使用它们;)

答案 4 :(得分:0)

以下是Google建议的解决方案(实际上是3个解决方案):

GeoLocation by Google