如何从PHP中的ipinfo.io获取位置?

时间:2015-01-18 16:27:04

标签: php json api

我正在使用ipinfo.io来使用PHP获取当前的城市(位置)。

然而,在使用这段代码时,我无法看到我的城市。

$ipaddress = $_SERVER["REMOTE_ADDR"];

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

$details = ip_details($ipaddress);
echo $details->city;

我不知道错误在哪里。

3 个答案:

答案 0 :(得分:6)

function getClientIP(){
  if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
  } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } else {
    $ip = $_SERVER['REMOTE_ADDR'];
  }
  return $ip;
}

$ipaddress = getClientIP();

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

$details = ip_details($ipaddress);
echo $details['city'];

这应该有效。

但是,如果你想要一个在线资源,我建议你习惯使用curl而不是file_get_contents()。 https://stackoverflow.com/a/5522668/3160141

答案 1 :(得分:2)

你在使用localhost吗?请尝试以下代码:

$ipaddress = $_SERVER["REMOTE_ADDR"];

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

$details = ip_details($ipaddress);
echo $details->ip; // CHANGE TO IP!!!

如果它返回您的IP,一切正常,您的IP可能是127.0.0.1,并且此站点不知道位置,因此未设置$details->city。如果城市不存在,您必须检查if (isset($details->city))并制作替代脚本。


我看到你还有问题。尝试做这样的事情:

$string = file_get_contents('http://ipinfo.io/8.8.8.8/geo');
var_dump($string);
$ipaddress = $_SERVER["REMOTE_ADDR"];
var_dump($ipaddress); 
$string2 = file_get_contents('http://ipinfo.io/'.$ipaddress.'/geo');
var_dump($string2);

并在评论中写下哪一个失败;)。


如果只有IP部分正常,请尝试阅读以下内容: File_get_contents not working?

并且还运行此代码并使用最大错误报告:

error_reporting(-1);

在此部分代码之前。

答案 2 :(得分:0)

我知道这篇文章很旧,但是对于目前正在寻找相同问题的人们来说,如果它在Localhost上,则可以解决此问题:

$ipaddress = $_SERVER["SERVER_ADDR"];

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

 $details = ip_details($ipaddress);
 echo $details->ip; // Use city, ip or other thing... see https://ipinfo.io

如果在Web服务器上,则仅使用此:

$server = $_SERVER['REMOTE_ADDR']; //in localhost this is ::1
echo "Your IP is: ".$server;

注意:这两个代码将获取公共ip,第一个代码将由Localhost获取公共ip,第二个代码将由Web服务器获取公共ip。 :)