| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | <?phpdefined('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地址绝对匹配,禁止你访问');					}				}			}		}	}}?>
 |