在部分开发场景中,我们需要获取用户的地理位置,根据城市返回不同的信息
如果是前后端分离,自然好做,前端获取定位,传给后端即可
但是如果是php渲染模板的,在第一次用户访问的时候,我们没办法拿到用户的地理位置
我们可以拿到用户的ip,然后利用ip去向腾讯的ip定位去请求,拿到用户的地理位置
代码示例
function get_client_ip(){
$ip = FALSE;
//客户端IP 或 NONE
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
//多重代理服务器下的客户端真实IP地址(可能伪造),如果没有使用代理,此字段为空
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) {
array_unshift($ips, $ip);
$ip = FALSE;
}
for ($i = 0; $i < count($ips); $i++) {
if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
//客户端IP 或 (最后一个)代理服务器 IP
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
$ip = get_client_ip();
$url = "https://apis.map.qq.com/ws/location/v1/ip?ip=$ip&key=YNFBZ-N5BRV-ZCJPS-USFGL-BSMHZ-YZFNZ";
$res = file_get_contents($url);//返回的是json
$data = json_decode($res,true);//转成数组
print_r($data);
返回的json格式示例
{
"status": 0,
"message": "query ok",
"result": {
"ip": "60.166.89.86",
"location": {
"lat": 31.8512,
"lng": 117.26061
},
"ad_info": {
"nation": "中国",
"province": "安徽省",
"city": "合肥市",
"district": "蜀山区",
"adcode": 340104
}
}
}
版权属于:本文是原创文章,版权归 吾梦小站 所有。
本文链接:https://nikm.cn/archives/18.html
本站所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由地转载和修改,但请务必注明文章来源并且不可用于商业目的。