利用新浪地址库获取访客地理位置出错

Author Avatar
MonsterX 2018年10月27日发布 | 11月06日最后更新
  • 在其它设备中阅读本文章

以前看到一个 WordPress 开发者 痞子大神 的站点,特效特别多了,甚至有点花眼。不过今天我们讨论的是其主题中的这样一个功能:获取访问用户的地理位置。作为一个电脑键盘只有三个键CtrlCV的鶸鷄,小怪兽看了一下他的主题 Funtion.php ,捡到了它获取访问者地址的代码,思路是用 php 代码调用新浪地址库获取,基本读懂了,贴在这里备用。

代码

<?php
function id_getip(){
 if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
   $ip = getenv("HTTP_CLIENT_IP");
  } else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
   $ip = getenv("HTTP_X_FORWARDED_FOR");
  } else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
   $ip = getenv("REMOTE_ADDR");
  } else  if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
   $ip = $_SERVER['REMOTE_ADDR'];
  } else {
   $ip = "unknown";
  }
 return $ip;
}

function id_getLocation($ip=''){
 empty($ip) && $ip = id_getip();
 if($ip=="127.0.0.1") return "本机地址";
 $api = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=$ip";
 $json = @file_get_contents($api);//调用新浪IP地址库
 $arr = json_decode($json,true);//解析json
 $country = $arr['country']; //取得国家
 $province = $arr['province'];//获取省份
 $city = $arr['city']; //取得城市
 if((string)$country == "中国"){
  if((string)($province) != (string)$city){
   $_location = $province.$city;
  }else{
   $_location = $country.$city;
  }
 }else{
  $_location = $country;
 }
 return $_location;
}

?>

食用方法

在需要显示的地方调用代码中的函数即可。

  • 调用 id_getLocation()
    显示根据新浪 IP 地址库获取的访客地区
  • 调用 id_getip()
    显示获取的访客 IP 。

举个栗子

调用上面的 php 代码后,在 <body></body> 中加入下面的代码:

欢迎来访~ 来自 <?php echo id_getLocation();?> 的朋友!

就会在放入代码的地方显示成:“欢迎来访~ 来自 中国北京 的朋友!” 这样。


按道理来说应该没有什么问题,但是目前该代码已经失效,无法获取用户地理位置,新浪 IP 地址库好像挂掉了…过段时间更新,欢迎提供新的地址库和新的方法,鶸鷄小怪兽在这里等你 2333

11.6 贴上一张文章参考 《Typecho 配置 CDN 后获取访客真实 IP》

本文链接:https://monsterx.cn/it/ip-location.html
本站文章除特殊说明外全部由 MonsterX 原创发布,未经允许禁止以任何形式转载。
如果您发现以上内容含有任何引起不适/侵犯权利/违反法律的内容,请立即 联系站长 进行处理。

选择表情