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

php限制IP和IP段的代码

发布:smiling 来源: PHP粉丝网  添加日期:2014-06-29 16:55:28 浏览: 评论:0 

php限制IP段代码是我在网上搜相关解决方法时搜到的,这个类的makePregIP函数逻辑有点问题,我修改了下可以使用了,这个类得功能是允许白名单中的IP地址访问,如果要实现限制黑名单中的IP地址访问,简单修改下checkIP函数中的代码逻辑就可以了.

使用方法,代码如下:

  1. $allow_ip = array("192.168.1.1","210.10.2.1-20","222.34.4.*","127.0.0.1"); 
  2. $oBlock_ip = new allowIp($allow_ip); 
  3. if( !$oBlock_ip->checkIP() ){ 
  4.   echo '您的IP为:'
  5.   echo $oBlock_ip->ip; 
  6.   exit('禁止访问'); 

allowIP类文件,代码如下:

  1. class allowIp { 
  2.  
  3.     function __construct($allow_ip){ 
  4.         if (emptyempty($allow_ip)) { 
  5.           return false; 
  6.         } 
  7.         $this->allow_ip = $allow_ip
  8.         $this->ip = ''
  9.  
  10.     } 
  11.  
  12.     private function makePregIP($str
  13.     {   
  14.         if (strstr($str,"-")) { 
  15.  
  16.             $aIP = explode(".",$str); 
  17.  
  18.             foreach ($aIP as $k=>$v) { 
  19.                 if (!strstr($v,"-")) { 
  20.                     $preg_limit .= $this->makePregIP($v); 
  21.                     $preg_limit .= "."
  22.                 } else
  23.                     $aipNum = explode("-",$v); 
  24.                     for($i=$aipNum[0];$i<=$aipNum[1];$i++){ 
  25.                         $preg .=$preg?"|".$i:"[".$i
  26.                     } 
  27.                     $preg_limit .=strrpos($preg_limit,".",1)==(strlen($preg_limit)-1)?$preg."]":".".$preg."]"
  28.                 } 
  29.             } 
  30.         } 
  31.         else { 
  32.             $preg_limit = $str
  33.         } 
  34.  
  35.         return $preg_limit
  36.     } 
  37.  
  38.     private function getAllBlockIP(){ 
  39.         if ($this->allow_ip) { 
  40.             $i = 1; 
  41.             foreach ($this->allow_ip as $k=>$v) { 
  42.                 $ipaddres = $this->makePregIP($v); 
  43.  
  44.                 $ip = str_ireplace(".",".",$ipaddres); 
  45.                 $ip = str_replace("*","[0-9]{1,3}",$ip); 
  46.                 $ipaddres = "/".$ip."/"
  47.                 $ip_list[] = $ipaddres
  48.                 $i++; 
  49.             } 
  50.         } 
  51.         return $ip_list
  52.     } 
  53.  
  54.     public function checkIP() { 
  55.         $iptable = $this->getAllBlockIP(); 
  56.         $IsJoined = false; 
  57.         //取得用户ip 
  58.         $Ip = $this->get_client_ip(); 
  59.         $Ip = trim($Ip); 
  60.         //在白名单中 
  61.         if ($iptable) { 
  62.             foreach($iptable as $value) { 
  63.                 if (preg_match("{$value}",$Ip)) { 
  64.                     $IsJoined = true; 
  65.                     break
  66.                 } 
  67.             } 
  68.         } 
  69.         //不在白名单中 
  70.         if( !$IsJoined ){ 
  71.             return false; 
  72.         } 
  73.         return true;   
  74.     } 
  75.  
  76.     private function get_client_ip(){ 
  77.         if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) 
  78.             $ip = getenv("HTTP_CLIENT_IP"); 
  79.         else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) 
  80.             $ip = getenv("HTTP_X_FORWARDED_FOR"); 
  81.         else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) 
  82.             $ip = getenv("REMOTE_ADDR"); 
  83.         else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) 
  84.             $ip = $_SERVER['REMOTE_ADDR']; 
  85.         else 
  86.             $ip = "unknown"
  87.         $this->ip = $ip
  88.         return($ip); 
  89.    } 

Tags: php限制IP IP段

分享到: