php - 问题是它在某些用户中返回 0.0.0.0,而不是用户的真实 ip
问题描述
我在注册看到一些 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 值(如果您希望丢弃这些值)。
此外,过滤不良条目后,reset()
如果您只能使用 1 个 ip,您可以在数组上使用以获取剩余项目中的第一个值。也就是说,如果您按照您喜欢的顺序设置数组。
推荐阅读
- debugging - 如何从核心转储中找出程序版本?我可以自己在那里写吗?
- mongodb - How to specify BigDecimal scale and precision in schema when loading a Mongo collection as a Spark Dataset
- amazon-web-services - 在 CloudFormation 中创建 AWS WorkMail Lambda 调用权限
- c# - 需要先用 if 停止方法 if to if number tow
- r - R中的代码有条件地减去数据框中的列
- python - pip install my_wheel 时设置环境变量
- python - 用 urllib 替换请求
- vue.js - 使用 laravel 资源集合的 VueJs 分页
- javascript - 在 Laravel 中将数据从一个 Vue.js 组件传递到另一个组件的最佳实践
- python - 从csv读取时,如何在pandas数据框中将方括号[]作为quotechar传递?