我正在使用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;
我不知道错误在哪里。
答案 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。 :)