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