欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

最新总结-php根据ip获取所在位置(定位)

程序员文章站 2022-06-11 11:13:57
...

一、前言:很多app及网站会用到定位这个功能,除了客户端的sdk集成之外,服务端也有解决方案!

二、网上各种方法:

1.新浪接口根据ip查询所在区域信息(经过测试,不能使用)

2.淘宝接口根据ip查询所在区域信息(经过测试,回调时间经常在10秒左右,甚至更久!)

3.腾讯根据IP获取地理位置API(经过测试,不能使用)

4.其他方法(需要收费,且有限制)

上面是查到的方法,具体不阐述了,网上都有。

5.除此之外,对于laravel框架,相应的获取ip位置的扩展包:点击github,具体使用教程见如下视频:点击跳转,在此也特别感谢laravel-china社区提供的贡献!

三、百度普通ip定位(回调时间<100ms):

当然,需要注册百度开放平台,然后开发者认证,审核通过后(我是当天就通过了)获得ak,就可以进行开发了,日配额:300万,基本够用的了。下面附上code:

最新总结-php根据ip获取所在位置(定位)

//获取ip地址
function get_ip(){
    if (isset($_SERVER)) {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
            $realip = $_SERVER['HTTP_CLIENT_IP'];
        } else {
            $realip = $_SERVER['REMOTE_ADDR'];
        }
    } else {
        if (getenv("HTTP_X_FORWARDED_FOR")) {
            $realip = getenv( "HTTP_X_FORWARDED_FOR");
        } elseif (getenv("HTTP_CLIENT_IP")) {
            $realip = getenv("HTTP_CLIENT_IP");
        } else {
            $realip = getenv("REMOTE_ADDR");
        }
    }
    return $realip;
}

   //百度ip接口
    public function get_ip()
    {
        $ip = get_ip();
        $ak = '自己的ak值';
        $url = file_get_contents("http://api.map.baidu.com/location/ip?ip=$ip&ak=$ak");
        $res1 = json_decode($url,true);
        $data =$res1;
        if ($data) {
            $this->response(array("status" => 1, "msg" => "查询成功", "result" => $data), 'json');
        } else {
            $this->response(array("status" => -1, "msg" => "查询失败"), 'json');
        }
    }
打印数据如下:
{
    "address": "HK|香港|香港|None|None|0|0",
    "content": {
        "address_detail": {
            "province": "香港特别行政区",
            "city": "香港特别行政区",
            "district": "",
            "street": "",
            "street_number": "",
            "city_code": 2912
        },
        "address": "香港特别行政区",
        "point": {
            "y": "2530455.45",
            "x": "12711279.5"
        }
    },
    "status": 0
}