PHP 获取客户端的真实IP地址

  PHP的全局函数$_SERVER可以简单的获取到客户机的IP地址,但是存在代理或者ip伪装的时候,使用全局变量就会导致获取到的不是真是的Ip地址,要想获取到真实的ip,这是要话费一番功夫的

   下面的函数,可以获取真实的IP地址

    

function getIp(){
   if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
       $ip = getenv("HTTP_CLIENT_IP");
   else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
       $ip = getenv("HTTP_X_FORWARDED_FOR");
  else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
       $ip = getenv("REMOTE_ADDR");
  else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
           $ip = $_SERVER['REMOTE_ADDR'];
       else
           $ip = "unknown";
       return($ip);

  这一套代码在ThinkPHP 3.2.3中,有此函数.

   函数:getenv()获取:Gets the value of an environment variable.  获取环境变量值.

   函数:strcasecmp() :strcasecmp — Binary safe case-insensitive string comparison  :比较字符串,不区分大小写.string1==string2 返回0 string1>string2 返回大于0的数,string1<string2 返回小于0的数

   关于最后对于$_SERVER的判断,那是因为:$_SERVER是服务器超级全局变量数组,用$_SERVER['REMOTE_ADDR']同样可以获取到客户端的IP地址.二者的区别在于,getenv不支持IIS的isapi方式运行的php.

   REMOTE_ADDR 是你的客户端跟你的服务器握手时候的ip,如果使用匿名代理,将显示代理服务器的的ip

      HTTP_CLIENT_IP :是代理服务器i发送的HTTP头,如果是超级匿名代理,则返回none;REMOTE_ADD 也会被替换为这个代理服务器i的ip

  

   

 

   

     

转载于:https://www.cnblogs.com/bing-yu12/p/7724316.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值