如何使用PHP获取客户端IP地址?
我想记录通过他/她的IP地址登录我网站的用户。
发布于 2010-06-09 13:15:04
无论您做什么,请确保不要信任从客户端发送的数据。$_SERVER['REMOTE_ADDR']包含连接方的真实IP地址。这是您能找到的最可靠的值。
但是,它们可以位于代理服务器之后,在这种情况下,代理可能已经设置了$_SERVER['HTTP_X_FORWARDED_FOR'],但是这个值很容易被欺骗。例如,它可以由没有代理的人设置,或者IP可以是来自代理后面的LAN的内部IP。
这意味着如果要保存$_SERVER['HTTP_X_FORWARDED_FOR'],请确保也保存了$_SERVER['REMOTE_ADDR']值。例如通过将这两个值保存在数据库中的不同字段中。
如果您要将IP作为字符串保存到数据库中,请确保您至少有45个字符的空间。IPv6将继续存在,并且这些地址比较旧的IPv4地址更大。
(请注意,IPv6通常最多使用39个字符,但也有一个特殊的IPv6 notation for IPv4 addresses,其完整形式最多可以使用45个字符。因此,如果你知道你在做什么,你可以使用39个字符,但如果你只是想设置并忘记它,使用45)。
发布于 2010-06-09 12:51:31
echo $_SERVER['REMOTE_ADDR'];http://php.net/manual/en/reserved.variables.server.php
发布于 2014-10-09 00:20:18
下面是获取用户IP地址的一种好方法的更干净的代码示例。
$ip = $_SERVER['HTTP_CLIENT_IP']
? $_SERVER['HTTP_CLIENT_IP']
: ($_SERVER['HTTP_X_FORWARDED_FOR']
? $_SERVER['HTTP_X_FORWARDED_FOR']
: $_SERVER['REMOTE_ADDR']);以下是使用elvis运算符的较短版本:
$_SERVER['HTTP_CLIENT_IP']
? : ($_SERVER['HTTP_X_FORWARDED_FOR']
? : $_SERVER['REMOTE_ADDR']);这是一个使用isset删除通知的版本(谢谢,@shasi kanth):
$ip = isset($_SERVER['HTTP_CLIENT_IP'])
? $_SERVER['HTTP_CLIENT_IP']
: isset($_SERVER['HTTP_X_FORWARDED_FOR'])
? $_SERVER['HTTP_X_FORWARDED_FOR']
: $_SERVER['REMOTE_ADDR'];https://stackoverflow.com/questions/3003145
复制相似问题