PHP 控制IP段是否可以访问


PHP 控制IP段是否可以访问,算法思想比较简单,就是根据设定要锁定的IP 区间化,然后判断来访IP是否在此区间内,如果是则禁止访问,反之则可以访问。

<?php
//把IP进行格式化,统一为IPV4, 参数:$op --操作类型 max 表示格式为该段的最大值,比如:192.168.1.* 格式化为:192.168.1.255 ,其它任意值表示格式化最小值: 192.168.1.1
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 =--&gt; $val )
  {
    $i++;
    $val = $val== "*" ? $ip_val:$val;
    $arr_temp[]= $val;
  }
  for($i=4-$i;$i&gt;0;$i--)
  {
    $arr_temp[]=$ip_val;
  }
  $comma = "";
  foreach($arr_temp as $v)
  {
    $result.= $comma.$v;
    $comma = ".";
  }
  return $result;
}
?>
<?php//取得来访问IP地址
function getip()
{
  if (isset($_SERVER)) {
  if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
     $realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
     $realip = $_SERVER['HTTP_CLIENT_IP'];
  } else {
     $realip = $_SERVER['REMOTE_ADDR'];
  }
  } else {
  if (getenv("HTTP_X_FORWARDED_FOR")) {
     $realip = getenv( "HTTP_X_FORWARDED_FOR");
  } elseif (getenv("HTTP_CLIENT_IP")) {
     $realip = getenv("HTTP_CLIENT_IP");
  } else {
     $realip = getenv("REMOTE_ADDR");
  }
  }
  return $realip;
}
?>
<?php
//控制是否能够访问 参数:$ip ---来访问IP ,$ip_from --- 区间段开始IP , $ip_to --- 区间段结束IP
function ipforbidden($ip,$ip_from,$ip_to)
{
  $from = strcmp($ip,$ip_from);
  $to = strcmp($ip,$ip_to);
  if($from --&gt;=0 && $to &lt;= 0)
  {
    return "u are forbidden!";
  }
  else return "u are access";
}
?>
<?php
//测试
$ip_min = convert_ip("min","127.1.0.*");
$ip_max = convert_ip("max","127.1.0.*");
$ip_current = "127.1.0.256";
echo ipforbidden($ip_current,$ip_min,$ip_max)." ";
?>

已有 4 位潜水的同学浮出水面了 »

  1. FORECE
    FORECE 2010-01-16 10:09 回复

    国家有大墙,我们有小墙。

  2. cyusy
    cyusy 2010-01-16 13:03 回复

    自己也可以加堵墙了

  3. ShuaiGe.Me
    ShuaiGe.Me 2010-02-07 20:16 回复

    集两家之言论,人人墙。。
    墙掉spamer~~

  4. Lai.Me  来么
    Lai.Me 来么 2010-09-27 22:06 回复

    不错的文章啊

添加新评论 »