因为一个程序需要用到这个功能,将IP段转为IP或范围,在网上搜索很久都没有找到需要的,只好自己动手造轮子丰衣足食。
/**
* 将IP段[192.168.0.0/30]类似转换成要求结果
* @param string $ipd ip段格式字符串'192.168.0.0/30',ip段支持0-32段,ip支持ip4
* @param int $type 需要返回的类型,默认0返回输入ip段内的随机ip字符串,例:192.168.0.2
* 1,返回当前ip段内所有ip字符串相接,例:192.168.0.1|192.168.0.2|192.168.0.3|
* 2,返回当前ip段内所有ip返回,例:192.168.0.1-192.168.0.3
* @return string 按需求返回字符串
* @author 大乐文章 www_dale6_com@163.com
*/
function ipd_to_ip($ipd, $type = 0)
{
list($ip, $hd) = explode('/', $ipd);
$yanma = array(
0 => 0, 1 => 2147483648, 2 => 3221225472, 3 => 3758096384, 4 => 4026531840, 5 => 4160749568, 6 => 4227858432, 7 => 4261412864, 8 => 4278190080, 9 => 4286578688, 10 => 4290772992, 11 => 4292870144, 12 => 4293918720, 13 => 4294443008, 14 => 4294705152, 15 => 4294836224, 16 => 4294901760, 17 => 4294934528, 18 => 4294950912, 19 => 4294959104, 20 => 4294963200, 21 => 4294965248, 22 => 4294966272, 23 => 4294966784, 24 => 4294967040, 25 => 4294967168, 26 => 4294967232, 27 => 4294967264, 28 => 4294967280, 29 => 4294967288, 30 => 4294967292, 31 => 4294967294, 32 => 4294967295,
);
$max = $yanma[32] - $yanma[$hd];
if ($type == 0) {
$max = rand(1, $max);
return long2ip(ip2long($ip) + $max);
}
if ($type == 1) {
$jg = '';
for ($a = 1; $a <= $max; $a++) {
$jg .= long2ip(ip2long($ip) + $a) . '|';
}
return $jg;
}
if ($type == 2) {
return long2ip(ip2long($ip) + 1) . '-' . long2ip(ip2long($ip) + $max);
}
}
//使用方法
echo ipd_to_ip('192.168.0.0/30');
// 192.168.0.2
echo ipd_to_ip('192.168.0.0/30', 1);
// 192.168.0.1|192.168.0.2|192.168.0.3|
echo ipd_to_ip('192.168.0.0/30', 2);
// 192.168.0.1-192.168.0.3
注意,因为很多IP段的数量非常庞大,所以这里返回所有ip用的是字符串拼接,不要用数组返回,不然内存不够要崩的。
本站的所有数据收集于网络如有侵犯到您的权益请联系 admin@dale6.com 进行下架处理。提供的内容仅用于学习和测试,不保证内容的正确性。通过使用本站内容随之而来的风险与本站无关。
转载时必须带上转载链接或本文链接!
本文链接: https://www.dale6.com/2021/06/09/phpjiangipduanzhuanweiiphuoipfanwei/
最多评论
最热文章
0条评论