我想获得一个访客的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。
答案 0 :(得分:5)
$_SERVER['REMOTE_ADDR'];
根据 the PHP documentation: 用户正在查看当前页面的IP地址。
这是连接到您服务器的IP(由您的服务器报告) 其他值由客户端设置。
HTTP_X_FORWARDED_FOR
是非标准标头(因此是x前缀),由某些代理服务器设置。大型代理服务器供应商试图帮助ISP识别滥用的IP地址;它包含一个包含所有转发IP的列表。
我不知道HTTP_CLIENT_IP
标题
答案 1 :(得分:2)
这取决于您的应用程序是否在反向代理之后或类似的东西。最简单的方法是检查所有三个,然后选择一个不属于你的IP。
答案 2 :(得分:1)
使用此:
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;
}
}
}
}
}