国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php限制IP和IP段的代碼

2024-05-04 21:47:54
字體:
來源:轉載
供稿:網友

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.    } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 容城县| 启东市| 三原县| 辉南县| 名山县| 浙江省| 沽源县| 武隆县| 北川| 南京市| 蕲春县| 叙永县| 汕头市| 公安县| 青州市| 巴中市| 崇明县| 丹凤县| 富宁县| 太和县| 龙川县| 泰来县| 安多县| 莆田市| 历史| 定远县| 扶沟县| 攀枝花市| 庄浪县| 藁城市| 台安县| 山阳县| 东乡族自治县| 富平县| 莱西市| 贵州省| 民乐县| 清苑县| 龙口市| 武隆县| 临沂市|