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)
- 最新评论