| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | 
							- <?php
 
- defined('IN_PHPCMS') or exit('No permission resources.');
 
- pc_base::load_sys_class('model', '', 0);
 
- class ipbanned_model extends model {
 
- 	public $table_name = '';
 
- 	public function __construct() {
 
- 			$this->db_config = pc_base::load_config('database');
 
- 			$this->db_setting = 'default';
 
- 			$this->table_name = 'ipbanned';
 
- 			parent::__construct();
 
- 	}
 
- 	
 
-   	/**
 
-  	 * 
 
-  	 * 把IP进行格式化,统一为IPV4, 参数:$op --操作类型 max 表示格式为该段的最大值,比如:192.168.1.* 格式化为:192.168.1.255 ,其它任意值表示格式化最小值: 192.168.1.1
 
-  	 * @param $op	操作类型,值为(min,max)
 
-  	 * @param $ip	要处理的IP段(127.0.0.*) 或者IP值 (127.0.0.5)
 
-  	 */
 
- 	public function convert_ip($op,$ip){
 
- 		  $arr_ip = explode(".",$ip); 
 
- 		  $arr_temp = array();
 
- 		  $i = 0;
 
- 		  $ip_val= $op== "max" ? "255":"1"; 
 
- 		  foreach($arr_ip as $key => $val ){ 
 
- 		    $i++; 
 
- 		    $val = $val== "*" ? $ip_val:$val; 
 
- 		    $arr_temp[]= $val; 
 
- 		  } 
 
- 		  for($i=4-$i;$i>0;$i--){ 
 
- 		    $arr_temp[]=$ip_val; 
 
- 		  } 
 
- 		  $comma = ""; 
 
- 		  foreach($arr_temp as $v){ 
 
- 		    $result.= $comma.$v; 
 
- 		    $comma = "."; 
 
- 		  } 
 
- 		  return $result; 
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 
 
- 	 * 判断IP是否被限并返回
 
- 	 * @param $ip		当前IP	
 
- 	 * @param $ip_from	开始IP段
 
- 	 * @param $ip_to	结束IP段
 
- 	 */
 
- 	public function ipforbidden($ip,$ip_from,$ip_to){ 
 
- 		$from = strcmp($ip,$ip_from); 
 
- 		$to = strcmp($ip,$ip_to); 
 
- 		if($from >=0 && $to <= 0){ 
 
- 		return 0; 
 
- 		} else {
 
- 		return 1; 
 
- 		}
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 
 
- 	 * IP禁止判断接口,供外部调用 ...
 
- 	 */
 
- 	public function check_ip(){
 
- 		$ip_array = array();
 
- 		//当前IP
 
- 		$ip = ip();
 
-  		//加载IP禁止缓存
 
- 		$ipbanned_cache = getcache('ipbanned','commons');
 
- 		if(!empty($ipbanned_cache)) {
 
- 			foreach($ipbanned_cache as $data){
 
- 				$ip_array[$data['ip']] = $data['ip'];
 
- 				//是否是IP段
 
- 				if(strpos($data['ip'],'*')){
 
- 					$ip_min = $this->convert_ip("min",$data['ip']);
 
- 					$ip_max = $this->convert_ip("max",$data['ip']);
 
- 					$result = $this->ipforbidden($ip,$ip_min,$ip_max);
 
- 					if($result==0 && $data['expires']>SYS_TIME){
 
- 						//被封
 
- 						showmessage('你在IP禁止段内,所以禁止你访问');
 
- 					}
 
- 				} else {
 
- 					//不是IP段,用绝对匹配
 
- 					if($ip==$data['ip']&& $data['expires']>SYS_TIME){
 
- 						showmessage('IP地址绝对匹配,禁止你访问');
 
- 					}
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- }
 
- ?>
 
 
  |