PHP IP及IP段进行访问限制的代码

  本来是写了几个函数,ip黑名单是记到库里的,为了方便理解,改成了一个class把IP黑名单写了出来。

  192.168.1.1 单个IP

  192.168.1.* 这样代理 192.168.1.1-192.168.1-255

  192.158.1.2-20 这样是代表192.158.1.2-192.158.1.20

  也可以这样写 192.168.1.[1|2|3]

  嘿嘿~一个方法不知道想法是否周全,拿出来大家讨论

  使用

  以下是引用片段:

  $oBlock_ip = new block_ip();

  $oBlock_ip->checkIP();

  以下是引用片段:

  <?php

  class block_ip {

  var $Block_ip = array("192.168.1.1","210.10.2.1-20","222.34.4.*");

  function __construct(){

  }

  function __destruct(){

  }

  PRivate function makePregIP($str){

  if (strstr($str,"-")) {

  $aIP = explode(".",$str);

  foreach ($aIP as $k=>$v) {

  if (!strstr($v,"-")) {

  $preg_limit .= makePregIP($v);

  } else{

  $aipNum = explode("-",$v);

  for($i=$aipNum[0];$i<=$aipNum[1];$i++){

  $preg .=$preg?"|".$i:"[".$i;

  }

  $preg_limit .=strrpos($preg_limit,".",1)==(strlen($preg_limit)-1)?$preg."]":".".$preg."]";

  }

  }

  }else{

  $preg_limit .= $str.".";

  }

  return $preg_limit;

  }

  private function getAllBlockIP(){

  if ($this->Block_ip)郑州男科医院排行榜 {

  foreach ($this->Block_ip as $k=>$v) {

  $ipaddres = $this->makePregIP($v->start_ip);

  $ip = str_ireplace(".","\.",$ipaddres);

  $ip = str_replace("*","[0-9]{1,3}",$ip);

  $ipaddres = "/".$ip."/";

  $ip_list[] = $ipaddres;

  }

  }

  return $ip_list;

  }

  public function checkIP() {

  $iptable = $this->getAllBlockIP();

  $IsJoined = true;

  //取得用户ip

  $Ip = $this->get_client_ip();

  $Ip = trim($Ip);

  //剔除黑名单中的IP区段

  if ($iptable) {

  foreach($iptable as $value) {

  if (preg_match("{$value}",$Ip)) {

  $IsJoined = false;

  break;

  }

  }

  }

  //郑州包皮手术医院指出如果在ip黑名单中就执行如下操作

  if( !$IsJoined ){

  echo "IP Error";

  exit;

  }

  }

  private function get_client_ip(){

  if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))

  $ip = getenv("HTTP_CLIENT_IP");

  else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))

  $ip = getenv("HTTP_X_FORWARDED_FOR");

  else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))

  $ip = getenv("REMOTE_ADDR");

  else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))

  $ip = $_SERVER['REMOTE_ADDR'];

  else

  $ip = "unknown";

  return($ip);

  }

  }

  ?>

posted @ 2014-08-06 10:26  WDYE  阅读(604)  评论(0编辑  收藏  举报