1. 云栖社区>
  2. PHP教程>
  3. 正文

PHP获得客户端IP

作者:用户 来源:互联网 时间:2017-12-01 20:15:39

客户端

PHP获得客户端IP - 摘要: 本文讲的是PHP获得客户端IP, 1 <?php   2   // Example use of getenv()  3   $ip = getenv('REMOTE_ADDR');  4   // Or simply use a Superglobal ($_SE

1 <?php  

2   // Example use of getenv() 

3   $ip = getenv('REMOTE_ADDR'); 

4   // Or simply use a Superglobal ($_SERVER or $_ENV) 

5   $ip = $_SERVER['REMOTE_ADDR'];  

6 ?>


这是在PHP官方的manual提供的方法。

但是当Web服务器API是ASAPI (IIS)的时候,getenv函数是不起作用的。这种情况下你如果用getenv来取得用户客户端ip的话,得到的将是错误的ip地址。

因此更为安全和准确的方法是尽量避免使用getenv函数。比如可以用以下的函数来获取ip信息:


01 <?php 

02     function GetIP(){ 

03         if (getenv("HTTP_CLIENT_IP")  

04             && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) 

05            $ip = getenv("HTTP_CLIENT_IP"); 

06         else if (getenv("HTTP_X_FORWARDED_FOR")  

07             && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) 

08            $ip = getenv("HTTP_X_FORWARDED_FOR"); 

09         else if (getenv("REMOTE_ADDR")  

10             && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) 

11            $ip = getenv("REMOTE_ADDR"); 

12         else if (isset($_SERVER['REMOTE_ADDR'])  

13             && $_SERVER['REMOTE_ADDR']  

14             && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) 

15            $ip = $_SERVER['REMOTE_ADDR']; 

16         else

17            $ip = "unknown"; 

18         return($ip); 

19     } 

20   

21     $ip = GetIP(); 

22     echo $ip; 

23 ?>


其中 HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR 的区别是


一、没有使用代理服务器的情况:

      REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示www.th7.cn
HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

      REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

      REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

      REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

      REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。


function getip(){
if($_SERVER['HTTP_X_FORWARDED_FOR']){
$online_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif($_SERVER['HTTP_CLIENT_IP']){
$online_ip = $_SERVER['HTTP_CLIENT_IP'];
}else{
$online_ip = $_SERVER['REMOTE_ADDR'];
}
return $online_ip;
}
 

摘自  PPP

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索客户端 ,以便于您获取更多的相关知识。