什么是检查用户国家的最佳解决方案?

问题描述:

服务,让API的什么是检查用户国家的最佳解决方案?

我读/听说有一个大量的服务,让API来做到这一点,但是我真的不想依靠任何人,所以请,如果有一种方法可以做到没有他们让我知道。

服务器端

同时,我读/听说这是在服务器端进行编码是什么让我困惑,我一直认为这是通过使用Javascript完成。

IP列表

而且我也看了/听说,让API的这些服务,他们有一个非常庞大的IP的列表,从ISP的,他们可以通过这个列表决定该国,这是真的吗?如果我想在没有API的情况下独自完成,我是否也应该有一个列表?

+0

你的意思是用户的当前地理位置? – Gumbo 2010-11-26 17:06:14

+0

嗯我的意思是国家,例如美国,俄罗斯,中国等 – Adam 2010-11-26 20:41:24

当我做我的查找,我用这个脚本:http://www.phptutorial.info/iptocountry/the_script.html

该DB的PHP文件的列表,您可以订阅一个列表,它会通知你的数据库的更新。非常有用,如果你没有数据库:)

+0

谢谢这是一个非常有用的链接:) – Adam 2010-11-26 16:17:29

任何检查通常走IP和使用一些数据库的IPranges和什么国家泰国分配。

这在大多数情况下工作,除非用户使用一些代理或likewize。

大多数这些花费金钱或仅为某些目的可用。

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

我没有任何特定的服务,建议作为他们大多不允许商业用途,因此我不能使用它们;)

+0

嗯非常感谢你的回答,浏览器时区是一个非常好的主意,我不知道存在这样的在浏览器中的一件事,但它有多可靠?我的意思是浏览器兼容性,以及它的工作原理 – Adam 2010-11-26 16:19:43

这里是一个解决方案(实际上是3解决方案),谷歌建议:

GeoLocation by Google

的MaxMind提供GEOLITE上国家 IP数据库,这也被一些网络日志分析器一样的Webalizer和AWStats的使用或支持。

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

获取用户国家的简单方法是读取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";