加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php限制IP与IP段的代码

发布时间:2022-01-23 02:45:39 所属栏目:PHP教程 来源:互联网
导读:php限制IP段代码是我在网上搜相关解决方法时搜到的,这个类的makePregIP函数逻辑有点问题,我修改了下可以使用了,这个类得功能是允许白名单中的IP地址访问,如果要实现限制黑名单中的IP地址访问,简单修改下checkIP函数中的代码逻辑就可以了. 使用方法,代码如
  php限制IP段代码是我在网上搜相关解决方法时搜到的,这个类的makePregIP函数逻辑有点问题,我修改了下可以使用了,这个类得功能是允许白名单中的IP地址访问,如果要实现限制黑名单中的IP地址访问,简单修改下checkIP函数中的代码逻辑就可以了.
 
  使用方法,代码如下:
 
  $allow_ip = array("192.168.1.1","210.10.2.1-20","222.34.4.*","127.0.0.1");
  $oBlock_ip = new allowIp($allow_ip);
  if( !$oBlock_ip->checkIP() ){
    echo '您的IP为:';
    echo $oBlock_ip->ip;
    exit('禁止访问');
  }
  allowIP类文件,代码如下:
 
  class allowIp {
  
      function __construct($allow_ip){
          if (emptyempty($allow_ip)) {
            return false;
          }
          $this->allow_ip = $allow_ip;
          $this->ip = '';
  
      }
  
      private function makePregIP($str)
      {   
          if (strstr($str,"-")) {
  
              $aIP = explode(".",$str);
  
              foreach ($aIP as $k=>$v) {
                  if (!strstr($v,"-")) {
                      $preg_limit .= $this->makePregIP($v);
                      $preg_limit .= ".";
                  } 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->allow_ip) {
              $i = 1;
              foreach ($this->allow_ip as $k=>$v) {
                  $ipaddres = $this->makePregIP($v);
  
                  $ip = str_ireplace(".",".",$ipaddres);
                  $ip = str_replace("*","[0-9]{1,3}",$ip);
                  $ipaddres = "/".$ip."/";
                  $ip_list[] = $ipaddres;
                  $i++;
              }
          }
          return $ip_list;
      }
  
      public function checkIP() {
          $iptable = $this->getAllBlockIP();
          $IsJoined = false;
          //取得用户ip
          $Ip = $this->get_client_ip();
          $Ip = trim($Ip);
          //在白名单中
          if ($iptable) {
              foreach($iptable as $value) {
                  if (preg_match("{$value}",$Ip)) {
                      $IsJoined = true;
                      break;
                  }
              }
          }
          //不在白名单中
          if( !$IsJoined ){
              return false;
          }
          return true;   
      }
  
      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";
          $this->ip = $ip;
          return($ip);
     }
  } 

php限制IP与IP段的代码

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读