我有一个用户提交的带有子网掩码的IP地址,我需要确保它是有效的。例如,如果用户提交:10.113.0.0/14,我需要将其标记为无效,因为该IP范围的/14块始于10.112.0.0。
我如何在PHP中实现这个功能?
我有一个用户提交的带有子网掩码的IP地址,我需要确保它是有效的。例如,如果用户提交:10.113.0.0/14,我需要将其标记为无效,因为该IP范围的/14块始于10.112.0.0。
我如何在PHP中实现这个功能?
我有同样的问题,所以在这里分享我的结果:
$ipLong = ip2long($ip);
if ( ( ($ipLong << $prefix) ^ 0) == true ) {
//IP and prefix pair is not valid
}
让我们来评估255.255.0.0/16。
对于IP 255.255.0.0,长整型的二进制表示为10000000000000000。
$ipLong << $prefix
左移16位以删除所有网络ID位。^ 0
在上一步操作后,检查是否存在任何设置的位。true
,则表示无效。在http://framework.zend.com/svn/framework/extras/incubator/library/ZendX/Whois/Adapter/Cidr.php底部的cidrMatch函数应该可以满足您的需求。