//$mask 子网掩码
// $begin 起始网段
$subnet = $this->sugar_ip4_op_mask($begin, $mask);//获取子网 不变化部分
if ($this->sugar_ip4_op_same($this->sugar_ip4_op_mask($router, $mask), $subnet) && $this->sugar_ip4_op_range($router, $subnet)) {
echo "correct";
}
function sugar_ip4_op_mask($addr, $mask) {
$la = ip2long($addr);
$lm = ip2long($mask);
return long2ip($la & $lm);
}
//check 路由 是否在范围内
function sugar_ip4_op_range($addr, $begin, $end = NULL)
{
$mid = ip2long($addr);
// if ($end) {
// $max = ip2long($end);
// if ($max < $mid)) {
// return FALSE;
// }
// }
$min = ip2long($begin);
return $mid > $min;
}
int ip2long ( string ip_address )
如果ip地址非法,返回FALSE(PHP 5.0.0以后)
注意,由于返回值是int,所以会造成数据溢出,比如有些ip地址转换后变成负数,因此需要转换成unsigned int类型
unsigned int _ip2long( string ip_address )
function _ip2long( $ip_address )
{
return sprintf("%u",ip2long($ip_address));
}