查找 json 字段(来自 ip 的地理位置)

Posted

技术标签:

【中文标题】查找 json 字段(来自 ip 的地理位置)【英文标题】:Find json fields (geolocation from ip) 【发布时间】:2017-11-20 02:25:28 【问题描述】:

我正在尝试从 json 文档中分别找到字段 latitudelongitude,其中包含基于您的 IP 地址的访问者的一些地理位置信息,其中包含以下代码,但是好像不行:

$User_Latitude = $jsondata["latitude"];
$User_Longitude = $jsondata["longitude"];

我的错误在哪里?

完整代码:

$ip = $_SERVER['REMOTE_ADDR'];

function curl_get_contents($url)

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;


    $freegeoipjson = unserialize(curl_get_contents("http://freegeoip.net/json/". $ip .""));
    $jsondata = json_decode($freegeoipjson);
    $User_Latitude = $jsondata["latitude"];
    $User_Longitude = $jsondata["longitude"];

    $url = sprintf("https://maps.googleapis.com/maps/api/geocode/json?latlng=%s,%s", $User_Latitude, $User_Longitude);
    $content = curl_get_contents($url); // get json content
    $metadata = json_decode($content, true); //json decoder
    if(count($metadata['results']) > 0)
    
        $result = $metadata['results'][0];
        $User_location=$result['formatted_address']; // Address into normalize format.
    
    echo $User_location;

【问题讨论】:

【参考方案1】:

如果您从 curl 函数中获取正确的数据,则需要进行两项更改:

    看起来您不需要反序列化调用(返回的数据在我看来没有序列化) 将第二个“true”参数传递给 json_decode 函数,以确保您实际上在 $jsondata 变量中获得了一个数组。

这是修改后的两行:

$freegeoipjson = curl_get_contents("http://freegeoip.net/json/". $ip);
$jsondata = json_decode($freegeoipjson, true);

【讨论】:

在我的情况下,如果我将 true 设置为 json_decode() 将失败。正确的是:$freegeoipjson = curl_get_contents("http://freegeoip.net/json/". $ip .""); $jsondata = json_decode($freegeoipjson);。请编辑您的答案,我将删除此评论。 我不太明白,抱歉。你是说一切正常吗?我在没有第二个参数的情况下测试了 json_decode,但它没有按预期工作,因为您将返回一个对象而不是数组。 似乎这些差异与您主机上的某些设置有关。但即便如此,我会接受你的回答。 谢谢。那么,您的初始代码中出现错误的原因是什么? unserialize 不必要并且必须像这样访问字段:$jsondata->latitude; $jsondata->longitude;

以上是关于查找 json 字段(来自 ip 的地理位置)的主要内容,如果未能解决你的问题,请参考以下文章

Cloudflare IP 地理位置替代方案?在 Javascript 或 PHP 中?

使用 IP 进行地理定位是查找计算机位置的好方法吗

批量地理定位数百万个 IP

使用地理位置查找最近的城市

来自具有免费 IP 地理定位网络服务的 IP 地址的国家/地区名称

通过 AWS amplify 和 ElasticSearch 查找地理和其他字段