www.adminn.cn
站长正能量分享网!

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

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

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地址。

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《php获得用户ip地址的比较不错的方法》
文章链接:https://www.adminn.cn/news/8530.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

扫码支付后请联系右侧QQ发送下载地址!!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏