栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在PHP中检索用户正确IP地址的最准确方法是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在PHP中检索用户正确IP地址的最准确方法是什么?

这是获取IP地址的更短,更简洁的方法:

function get_ip_address(){    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){     $ip = trim($ip); // just to be safe     if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){         return $ip;     } }        }    }}

希望对您有所帮助!


您的代码似乎已经很完整了,我看不到其中的任何可能的错误(除了常见的IP警告),

validate_ip()
尽管如此,我还是将功能更改为依赖过滤器扩展:

public function validate_ip($ip){    if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false)    {        return false;    }    self::$ip = sprintf('%u', ip2long($ip)); // you seem to want this    return true;}

您的

HTTP_X_FORWARDED_FOR
代码段也可以从此简化:

// check for IPs passing through proxiesif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){    // check if multiple ips exist in var    if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') !== false)    {        $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);        foreach ($iplist as $ip)        { if ($this->validate_ip($ip))     return $ip;        }    }    else    {        if ($this->validate_ip($_SERVER['HTTP_X_FORWARDED_FOR'])) return $_SERVER['HTTP_X_FORWARDED_FOR'];    }}

对此:

// check for IPs passing through proxiesif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){    $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);    foreach ($iplist as $ip)    {        if ($this->validate_ip($ip)) return $ip;    }}

您可能还需要验证IPv6地址。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433152.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号