PHP判断一个IP是否在一个网段中
网段
假设有一个网段为10.12.254.0/24,则此网络为10.12.254.0,二进制表示为00001010.00001100.11111110.00000000,网段后面的数字24表示:IP二进制表示的32位中的前24位;即所有在此网段中的IP,二进制表示的前24位相同。
00001010.00001100.11111110.00000000
00001010.00001100.11111110.********
------网段内相同部分-------|网段内不同
PHP判断是否在一个网段中
利用PHP脚本判断一个IP是否在一个网段中:
<?php
//$addr 形式 10.12.254.98
//$cidr 形式 10.12.254.0/24
function is_in_rang($addr, $cidr){
$cidrArr = explode('/', $cidr);
$ip = $cidrArr[0];
$mask = (isset($cidrArr[1])) ? $cidrArr[1] : 32;
return (ip2long($addr) >> (32 - $mask) == ip2long($ip) >> (32 - $mask));
}