首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中获取客户端IP地址

如何在PHP中获取客户端IP地址
EN

Stack Overflow用户
提问于 2010-06-09 12:50:17
回答 28查看 1.9M关注 0票数 1.3K

如何使用PHP获取客户端IP地址?

我想记录通过他/她的IP地址登录我网站的用户。

EN

回答 28

Stack Overflow用户

发布于 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)。

票数 1.4K
EN

Stack Overflow用户

发布于 2010-06-09 12:51:31

代码语言:javascript
复制
echo $_SERVER['REMOTE_ADDR'];

http://php.net/manual/en/reserved.variables.server.php

票数 225
EN

Stack Overflow用户

发布于 2014-10-09 00:20:18

下面是获取用户IP地址的一种好方法的更干净的代码示例。

代码语言:javascript
复制
$ip = $_SERVER['HTTP_CLIENT_IP'] 
   ? $_SERVER['HTTP_CLIENT_IP'] 
   : ($_SERVER['HTTP_X_FORWARDED_FOR'] 
        ? $_SERVER['HTTP_X_FORWARDED_FOR'] 
        : $_SERVER['REMOTE_ADDR']);

以下是使用elvis运算符的较短版本:

代码语言:javascript
复制
$_SERVER['HTTP_CLIENT_IP'] 
   ? : ($_SERVER['HTTP_X_FORWARDED_FOR'] 
   ? : $_SERVER['REMOTE_ADDR']);

这是一个使用isset删除通知的版本(谢谢,@shasi kanth):

代码语言:javascript
复制
$ip = isset($_SERVER['HTTP_CLIENT_IP']) 
    ? $_SERVER['HTTP_CLIENT_IP'] 
    : isset($_SERVER['HTTP_X_FORWARDED_FOR']) 
      ? $_SERVER['HTTP_X_FORWARDED_FOR'] 
      : $_SERVER['REMOTE_ADDR'];
票数 137
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3003145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档