Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么';检查用户所在国家/地区的最佳解决方案是什么?_Php - Fatal编程技术网

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

Php 什么';检查用户所在国家/地区的最佳解决方案是什么?,php,Php,提供API的服务 我读到/听说有很多服务提供API来实现这一点,但是我真的不想依赖任何人,所以如果有没有他们的方法,请让我知道 服务器端 我还听说这是在服务器端编码中完成的,这让我感到困惑,我一直认为这是通过Javascript完成的 IP列表 我还读到/听说那些提供API的服务,他们有一个非常庞大的ISP IP列表,他们可以通过这个列表来确定国家,这是真的吗?如果我想在没有API的情况下单独使用它,我也应该有一个列表吗?当我进行查找时,我使用了以下脚本: db是php文件的列表,您可以订阅一个

提供API的服务

我读到/听说有很多服务提供API来实现这一点,但是我真的不想依赖任何人,所以如果有没有他们的方法,请让我知道

服务器端

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

IP列表


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

当我进行查找时,我使用了以下脚本:


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

任何检查通常都会通过IP进行,并使用一些ipranges数据库以及它们被分配到哪个国家

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

其中大多数都需要钱,或者只能用于某些目的

另一个解决方案是使用浏览器Language,如果可以查询时区的话,也可以使用浏览器Language

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

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

MaxMind提供GeoLite国家IP数据库,一些web日志分析器(如Webalizer和AWStats)也使用或支持该数据库

它以CSV格式免费提供,您可以将其导入应用程序的数据库。
它们还提供了一个全面的。

获取用户所在国家/地区的简单方法是阅读HTTP\u ACCEPT\u语言标题

下面是一个示例(PHP):


嗯,非常感谢你的回答,浏览器时区是一个非常好的主意,我不知道浏览器中存在这样的东西,但是它有多可靠?我指的是浏览器兼容性,以及它是如何工作的?嗯,但时区的问题是,在同一时区中有很多国家:OIT不如一个好的GeoIP表可靠,但将语言+时区结合起来至少会给出一些关于它们可能来自何方的提示。这完全取决于你需要这些信息的目的和可靠性。你指的是用户当前的地理位置吗?嗯,我指的是国家,例如美国、俄罗斯、中国等。这是一个javascript解决方案,而不是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";