//$ip 要查询的IP地址
//$network IP 段 例: 192.168.1.1/24
function ip_in_network2($ip, $network){
$s = explode('/', $network);
$iper = decbin(ip2long($s['0']));
$maskBin = mask2binary($s['1']);
$ipnet = ($iper & $maskBin);
$cip = decbin(ip2long($ip));
$cipnet = ($cip & $maskBin);
if($ipnet == $cipnet){
return true;
}else{
return false;
}
}
//两位数 子网掩码 转 二进制
function mask2binary($mask){
if ($mask > 32) {
$this->error('错误的子网掩码!');
}
$str = array();
for ($i=0; $i < $mask; $i++) {
$str['0'] .= '1';
}
$we = 32-$mask;
$str2 = array();
for ($i=0; $i < $we; $i++) {
$str2['0'] .= '0';
}
$bin = $str['0'].$str2['0'];
return ($bin);
}
这是网上转载的,也可以使用。
####################################################
别人写的方法:
/*
判断指定IP 是否在一个IP段里
$ip 指定IP
$net IP段 例:192.168.1.255/24
*/
function ip_in_network($ip, $network)
{
$ip = (double) (sprintf("%u", ip2long($ip)));
$s = explode('/', $network);
$network_start = (double) (sprintf("%u", ip2long($s[0])));
$network_len = pow(2, 32 - $s[1]);
$network_end = $network_start + $network_len - 1;
if ($ip >= $network_start && $ip <= $network_end)
{
return true;
}
return false;
}