首页 > 编程知识 正文

php获取用户真实,php获取用户真实ip

时间:2023-12-26 12:11:39 阅读:322728 作者:ALJW

本文目录一览:

利用php怎么获取用户ip

php获取用户真实ip的方法:

方法1:

//获取REMOTE_ADDR属性,直接可以得到ip

$ip = $_SERVER["REMOTE_ADDR"];

echo $ip;

方法2:

//从Server中获取HTTP_VIA,如果获取到就用HTTP_X_FORWARDED_FOR的值替换,如果获取不到就取REMOTE_ADDR的值。

$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] :

$_SERVER["REMOTE_ADDR"];

$user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];

echo $user_IP;

方法3:

function getRealIp()

{

$ip=false; //初始化ip为false

if(!empty($_SERVER["HTTP_CLIENT_IP"])){ //如果HTTP_CLIENT_IP不为空

$ip = $_SERVER["HTTP_CLIENT_IP"]; //获取HTTP_CLIENT_IP的值

}

if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { //如果HTTP_X_FORWARDED_FOR不为空

$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);

//把HTTP_X_FORWARDED_FOR的值用,分割后存放数组ips

if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }//遍历处理

for ($i = 0; $i count($ips); $i++) {

if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {

$ip = $ips[$i]; //获得真实ip

break;

}

}

}

return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);

}

echo getRealIp();

如何准确获取用户真实ip php

function GetIP() {

  if (getenv('HTTP_CLIENT_IP')  strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')) {

        $onlineip = getenv('HTTP_CLIENT_IP');

      } elseif (getenv('HTTP_X_FORWARDED_FOR')  strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')) {

        $onlineip = getenv('HTTP_X_FORWARDED_FOR');

      } elseif (getenv('REMOTE_ADDR')  strcasecmp(getenv('REMOTE_ADDR'),'unknown')) {

        $onlineip = getenv('REMOTE_ADDR');

      } elseif (isset($_SERVER['REMOTE_ADDR'])  $_SERVER['REMOTE_ADDR']  strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')) {

        $onlineip = $_SERVER['REMOTE_ADDR'];

    }

  return $onlineip;

}

php怎样获取用户真实ip?

获取客户端ip其实不是个简单的事儿,因为存在IP欺骗,和代理问题,所以获取客户端的IP的真实性会打折扣的,不能百分百准确。但是我们还是可以尽量写一些比较完善的获取客户端真正ip方法。使用php获取IP的方法能有很多,我简单给个例子:

?php

function getip() { 

     $unknown = 'unknown'; 

     if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])  $_SERVER['HTTP_X_FORWARDED_FOR']  strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)){ 

         $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 

     }elseif(isset($_SERVER['REMOTE_ADDR'])  $_SERVER['REMOTE_ADDR']  strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)) { 

         $ip = $_SERVER['REMOTE_ADDR']; 

     } 

     /**

      * 处理多层代理的情况

      * 或者使用正则方式:$ip = preg_match("/[d.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;

      */

     if (false !== strpos($ip, ',')) $ip = reset(explode(',', $ip)); 

     return $ip; 

?

1、没有使用代理的情况

REMOTE_ADDR = 客户端IP

    HTTP_X_FORWARDED_FOR = 没数值或不显示

2、使用透明代理的情况

REMOTE_ADDR = 最后一个代理服务器 IP

    HTTP_X_FORWARDED_FOR = 客户端真实 IP (经过多个代理服务器时,这个值类似:        221.5.252.160, 203.98.182.163, 203.129.72.215)

    这类代理服务器还是将客户端真实的IP发送给了访问对象,无法达到隐藏真实身份的目的.

3、使用普通的匿名代理

REMOTE_ADDR = 最后一个代理服务器 IP

    HTTP_X_FORWARDED_FOR = 代理服务器 IP (经过多个代理服务器时,这个值类似:        203.98.182.163, 203.98.182.163, 203.129.72.215)

    这种情况下隐藏了客户端的真实IP,但是向访问对象透露了客户端是使用代理服务器访问它        们的.

4、使用欺骗性代理服务器

REMOTE_ADDR = 代理服务器 IP

    HTTP_X_FORWARDED_FOR = 随机的 IP(经过多个代理服务器时,这个值类似:                    220.4.251.159, 203.98.182.163, 203.129.72.215)

    这种情况下同样透露了客户端是使用了代理服务器,但编造了一个虚假的随机                            IP(220.4.251.159)代替客户端的真实IP来欺骗它.

5、使用高级匿名代理服务器

REMOTE_ADDR = 代理服务器 IP

    HTTP_X_FORWARDED_FOR = 没数值或不显示,也可能是unknown

php如何获取用户的真实ip地址??

你是在本机测试的吗?如果是在本机测试,那肯定就是127.0.0.1了,你上传到服务器上访问就会出真实的IP了

PHP如何获取客户端真实IP

如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面。

下面提供一个函数:?php

// 定义一个函数getIP()

function getIP(){global $ip;

if (getenv("HTTP_CLIENT_IP"))

$ip = getenv("HTTP_CLIENT_IP");

else if(getenv("HTTP_X_FORWARDED_FOR"))

$ip = getenv("HTTP_X_FORWARDED_FOR");

else if(getenv("REMOTE_ADDR"))

$ip = getenv("REMOTE_ADDR");else$ip = "Unknow";

return $ip;}

// 使用方法:

echo getIP();?

getenv("REMOTE_ADDR")用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。

但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值将是空的。

else if(getenv("HTTP_X_FORWARDED_FOR"))

$ip = getenv("HTTP_X_FORWARDED_FOR");

表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。

如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。

这种情况下已经确认客户端没有使用代理服务器,从而通过

else if(getenv("REMOTE_ADDR"))

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。