当前位置:首页 > PHP教程 > php应用 > 列表

php获得用户ip地址的比较不错的方法

发布:smiling 来源: PHP粉丝网  添加日期:2020-09-07 16:53:19 浏览: 评论:0 

REMOTE_ADDR只能获取访问者本地连接中设置的IP,如某大学校园网中自己设置的10.X.XXX.XXX系列IP,而这个函数获取的是局域网网关出口的IP地址,如果访问者使用代理服务器,将不获取代理服务器的IP,而是获取访问者网关的真实IP。如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面。

下面提供一个函数: 

  1. <?php  
  2.  
  3. // 定义一个函数getIP()  
  4. function getIP()  
  5. {  
  6. global $ip;  
  7.  
  8. if (getenv("HTTP_CLIENT_IP"))  
  9. $ip = getenv("HTTP_CLIENT_IP");  
  10. else if(getenv("HTTP_X_FORWARDED_FOR"))  
  11. $ip = getenv("HTTP_X_FORWARDED_FOR");  
  12. else if(getenv("REMOTE_ADDR"))  
  13. $ip = getenv("REMOTE_ADDR");  
  14. else  
  15. $ip = "Unknow";  
  16.  
  17. return $ip;  
  18. }  
  19.  
  20. // 使用方法:  
  21. echo getIP();  
  22.  
  23. ?> 

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

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

  1. else if(getenv("HTTP_X_FORWARDED_FOR"))  
  2. $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");这一行语句。

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

  1. else if(getenv("REMOTE_ADDR"))  
  2. $ip = getenv("REMOTE_ADDR");  

这两行语句获得客户端的IP地址也是真实的IP地址。

Tags: php获得用户ip

分享到: