禁止 IP 范围 php

Ban IP Ranges php

我找到了这段代码:

<?php               
    $ban_ip_range = array('10.49.*.*');
    $user_ip = $_SERVER['REMOTE_ADDR'];

    if(!empty($ban_ip_range)) {
        foreach($ban_ip_range as $range) {
            $range = str_replace('*','(.*)', $range);

            if(preg_match('/'.$range.'/', $user_ip)) {
                echo "NO access";
            }
            else {
                echo 'you have access'; 
            }
        }
    }
?>

这段代码完全可以正常工作,问题是我想添加多个范围,所以我这样做了:

$ban_ip_range = array('10.49.*.*','10.65.*.*');

但是这个没有用,它遍历了条件的两个部分并显示:

"NO accessyou have access"

有什么方法可以修复它吗?

使用标志,找到匹配项时切换它,在循环后对其进行评估。

$ban_ip_range = array('10.49.*.*','10.65.*.*');
$user_ip = '10.65.1.2'; //$_SERVER['REMOTE_ADDR'];
$access = true;

if(!empty($ban_ip_range)) {
    foreach($ban_ip_range as $range) {
        $range = str_replace('*','(.*)', $range);

        if(preg_match('/'.$range.'/', $user_ip)) {
            $access = false;
            break;
        }
    }
}

if($access) {
    echo 'you have access'; 
} else {
    echo 'NO access';
}