Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过主机掩码与PHP进行IP过滤/匹配&;MySQL_Php_Mysql_Ip Address_Netmask - Fatal编程技术网

通过主机掩码与PHP进行IP过滤/匹配&;MySQL

通过主机掩码与PHP进行IP过滤/匹配&;MySQL,php,mysql,ip-address,netmask,Php,Mysql,Ip Address,Netmask,我想做一些类似的事情: 除此之外,我想在MySQL表中存储一个不允许的IP/掩码列表,并检查是否匹配 就像链接中的示例一样,类似“10.2.0.0/16”的内容将是表中的一行,然后我想检查当前用户的IP地址($\u SERVER['REMOTE\u ADDR']),并检查它是否匹配 非常感谢:)关于ip2long()的php.net文档在注释中有一个很好的工作代码示例:表上有一些选项-您可以将IP存储为人类可读的字符串(4点字节)或cidr\u match使用的本机长数字。假设我们坚持使用人类可

我想做一些类似的事情:

除此之外,我想在MySQL表中存储一个不允许的IP/掩码列表,并检查是否匹配

就像链接中的示例一样,类似“10.2.0.0/16”的内容将是表中的一行,然后我想检查当前用户的IP地址($\u SERVER['REMOTE\u ADDR']),并检查它是否匹配


非常感谢:)

关于
ip2long()
的php.net文档在注释中有一个很好的工作代码示例:

表上有一些选项-您可以将IP存储为人类可读的字符串(4点字节)或cidr\u match使用的本机长数字。假设我们坚持使用人类可读性(重用链接页面中的
cidr\u match


(你可以在另一篇帖子上找到
cird\u match

你非常清楚自己想要什么,并且正在努力完成作业。。。我真的看不出有什么问题。@ShaunO:那你的问题是什么?你在哪方面有困难?请编辑问题,让我们知道-1代表“为我做我的工作/家庭作业,kthxbai”
function testIP($ip=$_SERVER['REMOTE_ADDR']) {
    //Returns TRUE - valid, FALSE - denied

    /* Get the data from the database and return it in rows
     * this could be real-time retrieved, or pulled into an array
     * first
     * assumes: deny_ranges(ip VARCHAR(45) not null,mask INT not null default 0)
     * eg: $denyips= get "SELECT ip,mask FROM deny_ranges" from database
     */

    foreach($denyips as $row) {
        if ($row["mask"]==0) {
            //No need to use overhead of CIDR_MATCH
            //Exact match - reject
            if ($row["ip"]==$ip) return false;
        } elseif (cidr_match($ip,$row["ip"]."/".$row["mask"])==true) {
            //In denied range - reject
            return false;
        }
    }
    //Got through all rejected ranges+ips - it's good
    return true;
}