通过得到客户端IP,和从数据库中得到IP位数

来源:互联网 发布:万科荣华金域名城 编辑:程序博客网 时间:2024/05/22 02:14

<?
/*********
 实现思想:通过得到客户端IP,和从数据库中得到IP位数
 将两者做与操作得到网段,再与数据库中的网段进行比较
**********/
function clearIp(){
 $fromIp = $_SERVERS['REMOTE_ADDR'];
 $isForbid = false;
 $result = mysql_query('Select `ip` From `forbid_ip_table`');
 while(!$result){
  $ipRage = explode('/',$result['ip']);
  $forbidIp = $ipRage[1];//IP段
  $maskLen = $ipRage[0];//子码位数
  if(getIpRage($fromIp,$maskLen) == $ofrbidIp){
   $isForbid = true;
   break;
  }
 }
 if($isForbid){
  header('Location:error.html');
 }
}
//将IP通过与子网掩码与操作得到网段
function getIpRage($ipAddress,$maskLen){
  $ipArr = explode('.',$ipAddress);
  $binStr = '';
  $ipRage = '';//返回的IP
  for($i = 0 ;$i<count($ipArr); $i++){
   $binStr = decbin($ipArr[$i]);
   if(strlen($binStr)<8){
    $zero = '';
    for($z = 0;$z<8-$binStr; $z++){
     $zero .='0';
    }
    $binStr .= $zero;
   }
   $tempIp = '';//局部变量
   for($j = 0; $j<8; $j++ ){
    $yesOrNot = $maskLen >0?1:0;
    $tempIp .= $binStr[$j]==$yesOrNot?$yesOrNot:0;
    $maskLen--;
   }
   $ipRage .= bindec($tempIp).'.';
  }

  return $ipRage;
}
//以下可以测试
$arr = getIpRage('192.168.112.122',14);
print_r($arr);

?>