原创PHP将IP段转为IP或IP范围

3 0 0
大乐文章
发表于3年前

因为一个程序需要用到这个功能,将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
最后修改:3年前
0条评论

留下你的评论

必须 登录 才能发表评论

Copyright © 2023 大乐文章 · 基于 WordPress · 使用大乐主题 · 鄂ICP备20005751号-1 · 备案图标鄂公网安备 42011202001820号