通过IP来得到当前的位置信息(高德地图)
2019-03-22 本文已影响0人
RocaLee
先从高德开发平台里添加应用,获取到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;
}