通过IP来得到当前的位置信息(高德地图)

先从高德开发平台里添加应用,获取到WEB服务的key
https://lbs.amap.com/api/webservice/guide/api/ipconfig/?sug_index=0
可以按照上面的链接来操作


下面写一个方法来获取当前的ip

function getIP()
{
    static $realip;
    if (isset($_SERVER)){
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
            $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } else if (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");
        } else if (getenv("HTTP_CLIENT_IP")) {
            $realip = getenv("HTTP_CLIENT_IP");
        } else {
            $realip = getenv("REMOTE_ADDR");
        }
    }
    return $realip;
}

写好之后开始使用此方法

$ip = getIp();
//因为我的本机ip是27.187.*.*
//如果是本地的ip为:127.0.0.1,为了方便使用我做了下面的判断
if($ip == '127.0.0.1')
$ip = '27.187.*.*';
//我主要想得到adcode,根据个人情况来写返回值
$adcode = $this->getLocation($ip);
public function getLocation($ip){
        $key = Config::get('map.key');    //为自己申请的key值
        $url = "https://restapi.amap.com/v3/ip?ip=$ip&output=xml&key=$key";
        $data = xmltoarray(file_get_contents($url));   //返回值是xml的格式,进行了解析
        $adcode = 0;
        if($data['status'] == 1){
            if($data['city'] == false){
                $adcode = 0;
            }else{
                $adcode = $data['adcode'];
            }
        }
        return $adcode;
}
//解析xml格式
//将xml格式转换为数组
function xmltoarray($xml) { 
     //禁止引用外部xml实体 
    libxml_disable_entity_loader(true); 
    $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); 
    $val = json_decode(json_encode($xmlstring),true); 
    return $val;
}

你可能感兴趣的:(通过IP来得到当前的位置信息(高德地图))