/**
     * 根据IP获取城市
     * @param string $ip ip地址
     * @return array
     * http://api.map.baidu.com/location/ip?ak=32f38c9491f2da9eb61106aaab1e9739&ip="+ip
     */
    public function getCityByIp($ip)
    {
        $result = false;
        $url =  "http://api.map.baidu.com/location/ip?ak=32f38c9491f2da9eb61106aaab1e9739&ip=".$ip;
        $result = file_get_contents($url);
        $result = json_decode($result);
        $result = self::objtoarr($result);
        if (is_array($result) && isset($result['status'])) {
            if ($result['status'] == 0 && isset($result['content'])) {
                $result['city'] = iconv('utf-8', 'gbk', $result['content']['address_detail']['city']);
            }
        }
        return $result;
    }
    /**
     * 将对象类型数据转化为数组形式
     * @param stdClass Object $obj 对象类型数据
     * @return array
     */
    public static function objtoarr($obj)
    {
        $ret = array();
        foreach ($obj as $key =>$value) {
            if (gettype($value) == 'array' || gettype($value) == 'object') {
                $ret[$key] = self::objtoarr($value);
            } else {
                $ret[$key] = $value;
            }
        }
        return $ret;
    }

/**
* 获取客户端IP地址
* @param boolean $pasportlogin 是否是passport登录
* @param boolean $forwarded    是否取HTTP_X_FORWARDED_FOR
* @return string
*/
function Get_Client_ip($pasportlogin = true, $forwarded = false)
{
    if (getenv("HTTP_X_REAL_IP") && strcasecmp(getenv("HTTP_X_REAL_IP"), "unknown") && !$forwarded)
        $ip = getenv("HTTP_X_REAL_IP");
    else 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";

if ($pasportlogin === true) {
        if (false !== strpos($ip, ',')) {
            $arrIp = explode(', ', $ip);
            for ($i = 0; $i < count($arrIp); $i++) {
                if (!eregi("^(10|172\.16|192\.168)\.", $arrIp[$i])) {
                    $ip = $arrIp[$i];
                    break;
                }
            }
        }
    }

return($ip);
}

根据IP获得城市信息(百度API的运用)的更多相关文章

  1. php根据IP获取经纬度信息--百度地图篇

    一.前言 之前一篇写过 php根据IP获取IP所在城市  ,但是还想再精确一点,获取这个IP所在的经纬度信息,该怎么办呢? 百度地图为我提供了一种解决方案(当然还有其他的解决方案). 先总的来数一下, ...

  2. php根据IP获取所在省份-百度api接口

    这里用的file_put_contents,你也可以用别的,直接怼代码: //拼接传递的参数 $getData = array( 'query' => '127.0.0.1', 'resourc ...

  3. (分享)根据IP获取地理位置(百度API)

    说明: 本程序调用的百度地图接口 http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip#h. 使用C#语言+VS2015 IDE开发 效 ...

  4. JavaScript一行代码获取公网IP及城市信息

    废话不多说,直接上代码! <script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=ut ...

  5. 根据Ip获取城市帮助类

    思路构建 1.先通过本地的测IP地址库进行匹配 2.如果本地IP地址库存在此IP的城市信息,就直接返回,调用速度也快 3.如果本地没有对应的IP城市信息,必须通过调用网络的IP查询的API了,这里我使 ...

  6. [整]C#获取天气预报信息(baidu api)包括pm2.5

    /// <summary> /// 获取天气预报信息 /// </summary> /// <returns></returns> public Bai ...

  7. 百度地图API的IP定位城市和浏览器定位(转)

    百度地图API提供了Geolocation 和 LocalCity两个服务类. 这俩API可以分别供用户在JavaScript中进行定位和城市确认. 1 本质上,Geolocation这个类是使用了支 ...

  8. geolocation/ 百度地图api Geolocation 定位当前城市信息

    根据当前所处位置 定位所在城市信息 <html> <head> <meta charset="UTF-8" /> <title>js ...

  9. 获得用户IP、城市、国家等信息的api接口

    1 这个信息比较多 https://api.ipdata.co/?api-key=test <script> $.get("https://api.ipdata.co?api-k ...

随机推荐

  1. c# 如何将字符串中用","分开的数字分别存入数组中

    string[] str="1,2,3,11,12,13".Split(',');

  2. 计时(.NET)

    using System.Diagnostics; // 开始计时 Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 要计时的操 ...

  3. OAF点击事件对页面组件的Required属性不验证

    在实际的需求中,OAF页面上很多字段设置了Required=YES,但是我们在点击某些按钮的时候,并不希望浏览器对其进行验证,可以通过设置 Disable Server Side Validation ...

  4. map和unordered_map

    1.boost::unordered_map, 它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中. ...

  5. 56. Merge Intervals 57. Insert Interval *HARD*

    1. Merge Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[ ...

  6. iOS-UI篇—简单的浏览器查看程序和Tomcat简单实现

    #import "ViewController.h" @interface ViewController () @property (retain, nonatomic) NSAr ...

  7. 微信小程序wx.chooseImage和wx.previewImage的综合使用(图片上传不限制最多张数)

    WXML: <view class="weui"> <view class="weui-uploader"> <view clas ...

  8. 2.strcpy使用注意(2)

    分析下述代码: void test2() { char string[10],str1[10]; int i; for(i=0;i<10;i++) { srtr1='a'; } strcpy(s ...

  9. Oracle sqlloader

    一.SQL*LOADER简介 SQL*Loader是oracle提供的可以从多种平面文件中向数据库中加载数据的工具,使用sqlldr工具可以在很短的时间内向数据库中加载大量的数据,像把制作好的exce ...

  10. L1-016 查验身份证

    一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8, ...