我有一个IP地址,另外还有两个IP地址,它们共同构成了一个IP范围。我想检查第一个IP地址是否在这个范围内。在PHP中,我该如何找出答案?
我有一个IP地址,另外还有两个IP地址,它们共同构成了一个IP范围。我想检查第一个IP地址是否在这个范围内。在PHP中,我该如何找出答案?
我为我的客户使用了这个:
$clientIpArray = explode(".", $clientIp);
$fromArray = explode(".", $from);
$toArray = explode(".", $to);
if( ((str_pad($clientIpArray[0], 3, "0", STR_PAD_LEFT) >= str_pad($fromArray[0], 3, "0", STR_PAD_LEFT)) && (str_pad($clientIpArray[0], 3, "0", STR_PAD_LEFT) <= str_pad($toArray[0], 3, "0", STR_PAD_LEFT)))
&&((str_pad($clientIpArray[1], 3, "0", STR_PAD_LEFT) >= str_pad($fromArray[1], 3, "0", STR_PAD_LEFT)) && (str_pad($clientIpArray[1], 3, "0", STR_PAD_LEFT) <= str_pad($toArray[1], 3, "0", STR_PAD_LEFT)))
&&((str_pad($clientIpArray[2], 3, "0", STR_PAD_LEFT) >= str_pad($fromArray[2], 3, "0", STR_PAD_LEFT)) && (str_pad($clientIpArray[2], 3, "0", STR_PAD_LEFT) <= str_pad($toArray[2], 3, "0", STR_PAD_LEFT)))
&&((str_pad($clientIpArray[3], 3, "0", STR_PAD_LEFT) >= str_pad($fromArray[3], 3, "0", STR_PAD_LEFT)) && (str_pad($clientIpArray[3], 3, "0", STR_PAD_LEFT) <= str_pad($toArray[3], 3, "0", STR_PAD_LEFT)))){
echo "IP within range";
}
$clientIp = "120.02.3.112";
$from = "1.02.1.112";
$to = "120.02.20.112";
正如您所理解的,此IP地址在范围内。如果您尝试按原样进行比较,它将无法工作。 我的解决方案是将IP地址分成元素,例如生成的数组将是:
$clientIpArray = ["120","02","3","112"];
$fromArray = ["1","02","1","112"];
$toArray = ["120","02","20","112"];