加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php代码将 IP和 IP段限制在内

发布时间:2023-06-10 13:30:32 所属栏目: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); 
   } 

(编辑:汽车网)

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

    推荐文章