加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

PHP获取用户IP地址的最准确方法

发布时间:2020-05-25 02:32:40 所属栏目:PHP 来源:互联网
导读:本文章向大家介绍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_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 proxies

if (!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 proxies

if (!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地址。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读