获取用户的当前位置

Jac*_*cuz 34 php ip geolocation

如何根据IP确定用户的当前位置(我猜它是这样工作的).

小智 32

<?php
$user_ip = getenv('REMOTE_ADDR');
$geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip"));
$country = $geo["geoplugin_countryName"];
$city = $geo["geoplugin_city"];
?>
Run Code Online (Sandbox Code Playgroud)

  • Geoplugin不是最好的平台.它限制为每分钟120次动作.它适用于我,但最近它开始显示403来自我的服务器的所有请求.谁知道为什么.(我没有在一分钟内完成120个连接) (3认同)
  • 没有用这些限制. (2认同)

Nav*_*nDA 23

编辑

更改freegeoip.netipinfo.io

<?php    

function get_client_ip()
{
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    } else if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else if (isset($_SERVER['HTTP_X_FORWARDED'])) {
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    } else if (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    } else if (isset($_SERVER['HTTP_FORWARDED'])) {
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    } else if (isset($_SERVER['REMOTE_ADDR'])) {
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    } else {
        $ipaddress = 'UNKNOWN';
    }

    return $ipaddress;
}
$PublicIP = get_client_ip();
$json     = file_get_contents("http://ipinfo.io/$PublicIP/geo");
$json     = json_decode($json, true);
$country  = $json['country'];
$region   = $json['region'];
$city     = $json['city'];
?>
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可能会回答这个问题,但提供有关此代码为何和/或如何回答问题的其他背景可提高其长期价值. (4认同)
  • __deprecation_message__:"此API端点已弃用,将于2018年7月1日停止工作.有关详细信息,请访问:https://github.com/apilayer/freegeoip#readme", (4认同)

小智 9

使用hostip.info服务尝试此代码:

$country=file_get_contents('http://api.hostip.info/get_html.php?ip=');
echo $country;

// Reformat the data returned (Keep only country and country abbr.)
$only_country=explode (" ", $country);

echo "Country : ".$only_country[1]." ".substr($only_country[2],0,4);
Run Code Online (Sandbox Code Playgroud)


Adn*_*eed 9

<?php
$query = @unserialize (file_get_contents('http://ip-api.com/php/'));
if ($query && $query['status'] == 'success') {
echo 'Hey user from ' . $query['country'] . ', ' . $query['city'] . '!';
}
foreach ($query as $data) {
    echo $data . "<br>";
}
?>
Run Code Online (Sandbox Code Playgroud)

使用此源代码尝试此代码.有用!

  • 做或不做.没有"尝试".一个好的答案***将始终解释所做的事情以及为什么以这种方式完成,不仅对于OP而且对于未来的SO访问者. (6认同)

glo*_*mad 5

MaxMind GeoIP是一项很好的服务。他们还有免费的城市级查询服务。

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 (6认同)