php获取客户端真实ip地址的三种方法

php获取用户(客户端)真实IP地址的两种方法

第一种方法,还算靠谱,本人以前一直用的是这个方法:

  1. function get_real_ip(){  
  2.     $ip=false;  
  3.     if(!empty($_SERVER['HTTP_CLIENT_IP'])){  
  4.         $ip=$_SERVER['HTTP_CLIENT_IP'];  
  5.     } 
  6.     if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){  
  7.         $ips=explode (', '$_SERVER['HTTP_X_FORWARDED_FOR']);  
  8.         if($ip){ array_unshift($ips$ip); $ip=FALSE; } 
  9.         for ($i=0; $i < count($ips); $i++){ 
  10.             if(!eregi ('^(10│172.16│192.168).'$ips[$i])){ 
  11.                 $ip=$ips[$i]; 
  12.                 break
  13.             } 
  14.         } 
  15.     } 
  16.     return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);  

第二种方法:

  1. function get_real_ip(){ 
  2.     static $realip
  3.     if(isset($_SERVER)){ 
  4.         if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
  5.             $realip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
  6.         }else if(isset($_SERVER['HTTP_CLIENT_IP'])){ 
  7.             $realip=$_SERVER['HTTP_CLIENT_IP']; 
  8.         }else
  9.             $realip=$_SERVER['REMOTE_ADDR']; 
  10.         } 
  11.     }else
  12.         if(getenv('HTTP_X_FORWARDED_FOR')){ 
  13.             $realip=getenv('HTTP_X_FORWARDED_FOR'); 
  14.         }else if(getenv('HTTP_CLIENT_IP')){ 
  15.             $realip=getenv('HTTP_CLIENT_IP'); 
  16.         }else
  17.             $realip=getenv('REMOTE_ADDR'); 
  18.         } 
  19.     } 
  20.     return $realip

第三种方法,摘自DISCUZ,应该还不错吧!

  1. // 获取IP地址(摘自discuz) 
  2. function getIp(){ 
  3.     $ip='未知IP'
  4.     if(!empty($_SERVER['HTTP_CLIENT_IP'])){ 
  5.         return is_ip($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP']:$ip
  6.     }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
  7.         return is_ip($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$ip
  8.     }else
  9.         return is_ip($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:$ip
  10.     } 
  11. function is_ip($str){ 
  12.     $ip=explode('.',$str); 
  13.     for($i=0;$i<count($ip);$i++){   
  14.         if($ip[$i]>255){   
  15.             return false;   
  16.         }   
  17.     }   
  18.     return preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/',$str);   

转载请注明:代码家园 » php获取客户端真实ip地址的三种方法

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)