星星博客站

PHP中简单获取当前IP,通过ip获取城市名称(文字形式,非地图)

编辑:php技术    日期:2017-09-10      

1.通过js获取 IP 这里是代用的搜狐接口

<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script><script>
    console.log(returnCitySN.cip);//当前ip
    //通过ajax提交到后台
    $.ajax({
        url:"自己的URL地址",
        data:{ip:returnCitySN.cip},
        dataType:"json",
        type:"post",
        success:function(data){
           var address =data.content.address_detail.city;
           console.log(address);
           $('.XiaoXi').text(address);
        }
    });
</script>


2.关键的来了!!! 返回的就是你想要的数据了!!!

public function local_ip()
{
    //API控制台申请得到的ak(此处ak值仅供验证参考使用)
    $ak = '你自己的秘钥';

    //应用类型为for server, 请求校验方式为sn校验方式时,系统会自动生成sk,可以在应用配置-设置中选择Security Key显示进行查看(此处sk值仅供验证参考使用)
    $sk = '你自己的sk';

    //以Geocoding服务为例,地理编码的请求url,参数待填
    $url = "http://api.map.baidu.com/location/ip?ip=%s&ak=%s&sn=%s";

    //get请求uri前缀
    $uri = '/location/ip';

    //地理编码的请求中address参数
    $ip = $_POST['ip'];


    //构造请求串数组
    $querystring_arrays = array (
        'ip' => $ip,
        'ak' => $ak
    );

    //调用sn计算函数,默认get请求
    $sn = $this -> caculateAKSN($sk, $uri, $querystring_arrays);

    //请求参数中有中文、特殊字符等需要进行urlencode,确保请求串与sn对应
    $target = sprintf($url, urlencode($ip), $ak, $sn);

            $res = file_get_contents($target);
            $res = json_decode($res,true);
            echo json_encode($res);

}
//配合上面的通过ip获取地址
public function caculateAKSN($sk, $url, $querystring_arrays, $method = 'GET')
{
    if ($method === 'POST'){
        ksort($querystring_arrays);
    }
    $querystring = http_build_query($querystring_arrays);
    return md5(urlencode($url.'?'.$querystring.$sk));
}


上一篇:没有了
下一篇: