Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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 使用ipinfo.io的IP位置_Php_Geolocation - Fatal编程技术网

Php 使用ipinfo.io的IP位置

Php 使用ipinfo.io的IP位置,php,geolocation,Php,Geolocation,我需要从访客IP获取州和国家。我将使用国家信息来展示定制的产品。至于州信息,它将不用于相同的目的,而仅用于记录以跟踪需求 我在此网站上发现了一个使用ipinfo.io API的实例,其示例代码如下: function ip_details($ip) { $json = file_get_contents("http://ipinfo.io/{$ip}/json"); $details = json_decode($json); return $details; } 然而,由于我不需要完整的细节

我需要从访客IP获取州和国家。我将使用国家信息来展示定制的产品。至于州信息,它将不用于相同的目的,而仅用于记录以跟踪需求

我在此网站上发现了一个使用ipinfo.io API的实例,其示例代码如下:

function ip_details($ip) {
$json = file_get_contents("http://ipinfo.io/{$ip}/json");
$details = json_decode($json);
return $details;
}

然而,由于我不需要完整的细节,我看到该网站允许只抓取单个字段。因此,我正在考虑使用以下2个:

1) ipinfo.io/{ip}/区域 2) ipinfo.io/{ip}/country

像这样:

function ip_details($ip) {
$ip_state = file_get_contents("http://ipinfo.io/{$ip}/region");
$ip_country = file_get_contents("http://ipinfo.io/{$ip}/country");
return $ip_state . $ip_country;
}

或者我会更喜欢:

  function ip_details($ip) {
$json = file_get_contents("http://ipinfo.io/{$ip}/geo");
$details = json_decode($json);
return $details;
}


最后一个url中有“/geo”,可以使用“/json”缩小第一个url的选择范围。目前,我倾向于使用上面的第二个选项,即使用2个file_get_内容,但我想知道它是否比数组中最后一个选项慢。只是想尽量减少加载时间。或者,如果可以提供任何其他方法,我们将不胜感激。

简而言之,选择第二种方法,只需一个请求(解析url时,文件内容会发出get请求):

结果是一个简单的数组,通过其键访问所需的详细信息:

function ip_details($ip) {
    $json = file_get_contents("http://ipinfo.io/{$ip}/geo");
    $details = json_decode($json);
    return $details;
}

$ipinfo = ip_details('86.178.xxx.xxx');

echo $ipinfo['country']; //GB
//etc
关于速度差异-99%的开销是网络延迟,因此发出一个请求并解析所需的详细信息要比发出两个单独的请求以获取单个详细信息快得多