php:geting ip地址
问题描述:
我想获得一个ip地址的访问者。 你能告诉我我应该使用什么样的元素$_SERVER[]
?php:geting ip地址
$_SERVER['HTTP_CLIENT_IP'];
$_SERVER['HTTP_X_FORWARDED_FOR'];
or
$_SERVER['REMOTE_ADDR'];
感谢
UPDATE:
如果您的客户端是通过代理服务器连接到互联网,然后$ _ SERVER [ 'REMOTE_ADDR']在PHP仅返回代理的IP地址服务器而不是客户端的机器。有额外的服务器变量可用于确定客户机在PHP中的确切IP地址,它们是HTTP_CLIENT_IP和HTTP_X_FORWARDED_FOR。
答
$_SERVER['REMOTE_ADDR'];
根据 the PHP documentation: 从用户正在浏览当前页面的IP地址。
这是连接到您的服务器的IP(报告由您的服务器)。
其他值由客户端设置。
HTTP_X_FORWARDED_FOR
是由某些代理服务器设置的非标准头(因此是x前缀)。大代理服务器供应商试图帮助ISP识别恶意IP地址;它包含一个包含所有转发的IP列表。
我不知道HTTP_CLIENT_IP
头
+0
@Jacco看看更新 – Simon 2010-04-14 14:53:58
答
的起源这取决于你的应用程序背后是一个反向代理或类似的东西。最简单的做法是检查全部三项并选择不是您的IP之一。
答
使用此:
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;
}
}
}
}
}
任何以 'HTTP' 可能是伪造的。 – 2010-04-14 14:46:30