php引用另一个php_php获取客户端ip

php引用另一个php_php获取客户端ipphp$_SERVER[”REMOTE_ADDR’]获取IP并不真实bug出现最近有个小项目投票上线了,结果发现投票没多久就出现投票不成功的错误(IP限制数超越错误)!bug跟踪连上服务器的数据库一看,发现数据库IP记录清一色是167863555(ip转int后),这地址是服务器内网的IP,很可能就是服务器的代理IP。翻看Controller,发现IP获取是ip=ip=_SERVER[‘__server[‘remote’]

php引用另一个php_php获取客户端ip"

php $_SERVER[’‘REMOTE_ADDR’] 获取IP并不真实

bug 出现

最近有个小项目投票上线了,结果发现投票没多久就出现投票不成功的错误(IP限制数超越错误)!

bug 跟踪

连上服务器的数据库一看,发现数据库IP记录清一色是167863555(ip转int后),这地址是服务器内网的IP,很可能就是服务器的代理IP。翻看Controller,发现IP获取是$ip = S E R V E R [ ′ R E M O T E A D D R ′ ] ; 咋 看 这 代 码 似 乎 问 题 不 大 , 本 地 测 试 时 候 I P 获 取 也 正 常 , 但 生 产 环 境 却 大 有 不 同 , 第 一 使 用 了 反 向 代 理 ( n g i n x 等 ) , 用 户 也 可 能 使 用 代 理 , 因 此 单 纯 的 _SERVER[‘REMOTE_ADDR’]; 咋看这代码似乎问题不大,本地测试时候IP获取也正常,但生产环境却大有不同,第一使用了反向代理(nginx等),用户也可能使用代理,因此单纯的 SERVER[REMOTEADDR];IP使(nginx)使_SERVER[‘REMOTE_ADDR’]并不能感知用户真实IP

bug 解决

解决办法是使用以下函数,基本能拿到用户真实IP

    //获取用户IP地址
    public function getIp()
    {
    
    	if(!empty($_SERVER["HTTP_CLIENT_IP"]))
    	{
    		$cip = $_SERVER["HTTP_CLIENT_IP"];
    	}
    	else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
    	{
    		$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    	}
    	else if(!empty($_SERVER["REMOTE_ADDR"]))
    	{
    		$cip = $_SERVER["REMOTE_ADDR"];
    	}
    	else
    	{
    		$cip = '';
    	}
    	preg_match("/[\d\.]{7,15}/", $cip, $cips);
    	$cip = isset($cips[0]) ? $cips[0] : 'unknown';
    	unset($cips);
    
    	return $cip;
    }

更多原创php技术贴,欢迎浏览BKDUCK博客[www.bkduck.cn/][1]
[1]: https://www.bkduck.cn/

今天的文章php引用另一个php_php获取客户端ip分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/59239.html

(0)
编程小号编程小号

相关推荐

发表回复

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