php:获取IP地址
Posted
技术标签:
【中文标题】php:获取IP地址【英文标题】:php: getting ip address 【发布时间】:2011-02-07 23:01:52 【问题描述】:我想获取访问者的 IP 地址。
你能告诉我应该使用$_SERVER[]
的哪个元素吗?
$_SERVER['HTTP_CLIENT_IP'];
$_SERVER['HTTP_X_FORWARDED_FOR'];
or
$_SERVER['REMOTE_ADDR'];
更新:
如果您的客户端通过代理服务器连接到 Internet,那么 php 中的 $_SERVER['REMOTE_ADDR'] 只返回代理服务器的 IP 地址,而不是客户端机器的 IP 地址。有额外的服务器变量可能可用于在 PHP 中确定客户端机器的确切 IP 地址,它们是 HTTP_CLIENT_IP 和 HTTP_X_FORWARDED_FOR。
【问题讨论】:
任何以“HTTP”开头的东西都可能是伪造的。 【参考方案1】:$_SERVER['REMOTE_ADDR'];
根据 the PHP documentation: 用户查看当前页面的 IP 地址。
这是连接到您的服务器的 IP(由您的服务器报告)。 其他值由客户端设置。
HTTP_X_FORWARDED_FOR
是一个非标准标头(因此是 x 前缀),由某些代理服务器设置。这是大型代理服务器供应商帮助 ISP 识别滥用 IP 地址的尝试;它包含一个包含所有转发 IP 的列表。
我不知道HTTP_CLIENT_IP
标头的出处
【讨论】:
【参考方案2】:这取决于您的应用程序是否在反向代理或类似的东西后面。最简单的做法是检查所有三个并选择一个不是您的 IP 之一。
【讨论】:
【参考方案3】:使用这个:
function getIP()
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) === true)
foreach (explode(',', $_SERVER[$key]) as $ip)
if (filter_var($ip, FILTER_VALIDATE_IP) !== false)
return $ip;
【讨论】:
以上是关于php:获取IP地址的主要内容,如果未能解决你的问题,请参考以下文章