CDN下获取访客真实IP,并且获取地理位置!

CDN下获取访客真实IP,并且获取地理位置!

初学PHP,在研究源码的时候,给网站使用了cloudflare,导致无法获取用户真实ip。最后发现在源码中,获取ip的方式是$ip = $_SERVER['REMOTE_ADDR'];
CDN下获取访客真实IP,并且获取地理位置!
print_r了$_SERVER,这才想起来是超级全局变量。
发现真实IP是存在HTTP_CF_CONNECTING_IP里的,最后搜索了一下解决方案,有现成的就直接拿过来用了。

if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
	$ip_list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
	$_SERVER['REMOTE_ADDR'] = $ip_list[0]; 
}

但是此时又出现了问题,网站能正确获取用户真实ip,但显示地址的时候还是有问题。
然后回去查看源码,发现使用的是126的接口,估计是数据库更新不及时,ip判断不准确。
//更新用户ip

function jinsom_update_ip($user_id) {
	$city_lock=get_user_meta($user_id,'city_lock',true);
	if($city_lock=='unlock'||!$city_lock) {
		$ip = $_SERVER['REMOTE_ADDR'];
		$str = file_get_contents('http://ip.ws.126.net/ipquery?ip='.$ip);
		$str1= explode('localAddress={city:"',$str);
		$str1=iconv("gb2312","UTF-8",$str1['1']);
		$str2= explode('", province',$str1);
		$p1=explode('province:"',$str1);
		$p2=explode('"',$p1['1']);
		if($str2['0']==''||$str2['0']==$p2['0']) {
			$city=$p2['0'];
		} else {
			$city=$p2['0'].'·'.$str2['0'];
		}
		update_user_meta($user_id,'city',$city);
	}
}

搜索了几个接口,发现了taobao的接口很完美,于是着手替换http://ip.taobao.com/service/getIpInfo.php?ip=

但是此时又出现了新问题,126的接口传回来的数据是个数组直接能用,taobao接口传回来的是json格式的,那只能又去搜,最后发现了json_decode(),在之前的代码上按我的理解修改测试。
最终完美替换成taobao的接口,前台正确显示了地理位置,很棒!

function jinsom_update_ip($user_id) {
	$city_lock=get_user_meta($user_id,'city_lock',true);
	if($city_lock=='unlock'||!$city_lock) {
		$ip = $_SERVER['REMOTE_ADDR'];
		$url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
		$ip=json_decode(file_get_contents($url));
		if((string)$ip->
		code=='1') {
			return false;
		} else {
			$data = (array)$ip->
			data;
		}
		if($data['country']==''||$data['region']==$data['city']) {
			$city=$data['city'];
		} else {
			$city=$data['region'].'·'.$data['city'];
		}
		update_user_meta($user_id,'city',$city);
	}
}

本文作者:𝙕𝙆𝘾𝙊𝙄

文章名称:CDN下获取访客真实IP,并且获取地理位置!

文章链接:https://www.zkcoi.com/365up/program/242.html

本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
𝙕𝙆𝘾𝙊𝙄𝙕𝙆𝘾𝙊𝙄
上一篇 2019年6月3日 上午9:45
下一篇 2019年7月8日 下午2:09

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

私聊博主

立即联系
一般有空就回复

qrcode_web

微信扫码联系我

分享本页
返回顶部