快捷搜索:   nginx

PHP+Jquery给网站添加访客IP地址和IP归属地显示功能 AJAX无刷新显示IP 新浪IP库

首先使用后端获取访客的真实IP和代理IP(访客如果挂代理访问的话,或者您网站使用CDN的话,都会又这个代理IP产生)

命名为ip.php代码如下:

<?php
header('Content-type: application/json');
function get_real_ip()
{
    foreach (array(
                'HTTP_CLIENT_IP',
                'HTTP_X_FORWARDED_FOR',
                'HTTP_X_FORWARDED',
                'HTTP_X_CLUSTER_CLIENT_IP',
                'HTTP_FORWARDED_FOR',
                'HTTP_FORWARDED',
                'REMOTE_ADDR') as $key) {
        if (array_key_exists($key, $_SERVER)) {
            foreach (explode(',', $_SERVER[$key]) as $ip) {
                $ip = trim($ip);
                //会过滤掉保留地址和私有地址段的IP,例如 127.0.0.1会被过滤
                //也可以修改成正则验证IP
                if ((bool) filter_var($ip, FILTER_VALIDATE_IP,
                                FILTER_FLAG_IPV4 |
                                FILTER_FLAG_NO_PRIV_RANGE |
                                FILTER_FLAG_NO_RES_RANGE)) {
                    return $ip;
                }
            }
        }
    }
    return null;
}
$cdnip = $_SERVER['REMOTE_ADDR'];
$realip = get_real_ip();
if($cdnip != $realip){
$ipoutput1 = "本站CDN开启中,";
}
else
{
$ipoutput1 = "本站CDN未开启,";
}
echo '[{"status":"'.$ipoutput1.'","cdnip":"'.$cdnip.'","realip":"'.$realip.'"}]';
?>


我这里是应用于CDN.BNXB.COM让访客判断其访问的是哪个CDN节点用的,如果您没使用CDN,那可以把字眼改成您使用代理访问,代理IP是,类似这样的字眼


然后就是前端页面

ip.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>getJSON获取数据</title>
<script src="//cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
  
    $.getJSON("ip.php",function(data){
      var $jsontip = $("#jsonTip");
      $jsontip.empty();//清空内容
      $.each(data,function(infoIndex,info){
        var realip = info["realip"];
        var cdnip = info["cdnip"];
        var status = info["status"];
        if (cdnip !== null && cdnip !== undefined){
//获取到IP后访问新浪接口
$.getScript('https://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip='+cdnip, function(_result){
var ipData = ""; //初始化保存内容变量
ipData += status;
ipData += "CDN节点:" + realip + "(";
ipData += remote_ip_info.country ;
ipData += remote_ip_info.province;
ipData += remote_ip_info.city;
ipData += remote_ip_info.district;
ipData += remote_ip_info.isp;
ipData += remote_ip_info.type;
ipData += remote_ip_info.desc + "),";
$("#sina_ip_info").html(ipData);
});
$.getScript('https://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip='+realip, function(_result){
//初始化保存内容变量
var ipData2 = "";
ipData2 += "您的IP:" + realip + "(";
ipData2 += remote_ip_info.country ;
ipData2 += remote_ip_info.province;
ipData2 += remote_ip_info.city;
ipData2 += remote_ip_info.district;
ipData2 += remote_ip_info.isp;
ipData2 += remote_ip_info.type;
ipData2 += remote_ip_info.desc + ")";
$("#sina_ip_info2").html(ipData2); //显示处理后的数据
});
}
else
{
$.getScript('https://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip='+realip, function(_result){
//初始化保存内容变量
var ipData2 = "";
ipData2 += "您的IP:" + realip + "(";
ipData2 += remote_ip_info.country ;
ipData2 += remote_ip_info.province;
ipData2 += remote_ip_info.city;
ipData2 += remote_ip_info.district;
ipData2 += remote_ip_info.isp;
ipData2 += remote_ip_info.type;
ipData2 += remote_ip_info.desc + ")";
$("#sina_ip_info2").html(ipData2); //显示处理后的数据
});
}
 //获取信息结束       
      })
   
  })
})
</script>
</head>
<body>
  <small id="sina_ip_info"> </small><small id="sina_ip_info2"> </small>
 
</body>
</html>

其实如果不需要回显IP信息,只要显示访客的地理位置信息的话,可以不需要ip.php文件,然后将新浪域名后面跟着的调用的realip,cdnip之类的都去掉,就行了,另外需要注意的是,如果使用的浏览器,开启了ublock之类的插件,那可能会把新浪的地址给拦截,可能就无法正常显示了

最终效果可以见https://cdn.bnxb.com

顶(4)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论