如何创建一系列IP地址?

时间:2009-12-21 04:19:10

标签: php

假设输入为:

222.123.34.45222.123.34.55

然后我需要输出它们之间的IP地址:

222.123.34.45 222.123.34.46 ... 222.123.34.55

3 个答案:

答案 0 :(得分:20)

使用ip2long()long2ip()

function ip_range($from, $to) {
  $start = ip2long($from);
  $end = ip2long($to);
  $range = range($start, $end);
  return array_map('long2ip', $range);
}

以上将两个IP地址转换为数字(使用PHP核心功能),创建一系列数字,然后将该数字范围转换为IP地址。

如果你想用空格分隔implode()结果。

答案 1 :(得分:0)

利用PHP的类型灵活性

利用IP地址实际上是数字的事实(可能会做奇怪的事情

    $ ip2 ='222.123.34.55';

$ips = array();
for($i=ip2long($ip);$i<=ip2long($ip2);$i++)
{
    $ips[] = long2ip($i);
}

print_r($ips);

答案 2 :(得分:0)

你可以使用这个功能; $ ipStr =“192.168.1.0/255”;

 function getIpsArrayFromStrRange($ipStr) {
    $ipsArray = array();
    //validate ip and check range existing
    $regexp = '/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})(\/(\d{1,3}))?$/';
    $matches = array();
    if(preg_match($regexp,$ipStr,$matches)){


        //if it is a range
        if(isset($matches[6])){
            $min_ip = min($matches[4],$matches[6]);
            $max_ip = max($matches[4], $matches[6]);
            for($i=$min_ip; $i<=$max_ip; $i++){
                $ipsArray[] = "$matches[1].$matches[2].$matches[3].$i";
            }   
        }else{
            $ipsArray[] = $ipStr;
        }
        return $ipsArray;
    }else{
        return false;
    }
}