我在注册看到wordpress视频的用户的ip时遇到问题这是我获取ip的函数,问题是它在一些用户中返回0.0.0.0,而不是用户的真实ip
function get_ip_address()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
if ($ip === '::1') {
return '127.0.0.1';
}
return $ip;}
这更多的是在服务器或代码方面,有人能帮我吗?
执行此操作的方式将返回第一个非空字符串和0.0.0.0
计数。如果愿意的话,你可以尝试添加另一条规则:
function get_ip_address()
{
if (!empty($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP']!=="0.0.0.0") {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR']!=="0.0.0.0") {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
if ($ip === '::1') {
return '127.0.0.1';
}
return $ip;}
我的方法是,将所有可能的变量存储在一个数组中,并对数组中看起来有效的变量进行评级。像这样的东西会过滤空值并保留剩余值:
$IPS=array_filter([
'addr'=>$_SERVER['REMOTE_ADDR'],
'forx'=>$_SERVER['HTTP_X_FORWARDED_FOR'],
'http'=>$_SERVER['HTTP_CLIENT_IP'],
]);
您也可以将str_replace
作为array_map
的回调,以删除数组中的0.0.0.0值(如果您希望放弃这些值(。
此外,在过滤坏条目后,如果只能使用1个ip,则可以在数组上使用reset()
来获得剩余项中的第一个值。也就是说,如果您按照自己喜欢的顺序设置数组。
function get_client_ip() {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
echo get_client_ip();