使用PHP扩展给定的IP范围

时间:2011-10-08 17:40:23

标签: php explode

我有一个textarea:

<form action="index.php" method="post">
<textarea name="test" rows="20" cols="20"></textarea>
<input type="submit" />
</form>

我想键入195.2.2.13/16,PHP应该给我一个这样的列表:

195.2.2.13
195.2.2.14
195.2.2.15
195.2.2.16

我怎么能用PHP做到这一点?

3 个答案:

答案 0 :(得分:2)

我注意到最初发布的代码没有两个小数点,但只需要使用3以下就可以了。

$input = "195.2.2.13/100";

function ipRange( $input ) {
    $input = explode( "/", $input );
        $numerator = substr( strrchr( $input[0], "." ), 1,  3 );
        $denominator = $input[1];
            $num = strlen( $numerator );
        $range = substr( $input[0], 0, -$num );

    while ( $numerator <= $denominator ) {
        echo $range.$numerator."<br />\n\r";
        $numerator++;
    }
}

// Call function
ipRange($input);

答案 1 :(得分:0)

您可以使用ip2long执行此操作。

将您的字符串转换为int,获取最小和最大IP,在它们之间进行迭代并使用long2ip将其渲染回来。

答案 2 :(得分:0)

$parts = explode('/', $_POST['name']);
$ip = $parts[0];
$max = $parts[1];
$octets = explode('.', $ip);
$start = $octets[3];

$ips = array();
for ($i = $start; $i <= $max; $i++) {
  if ($i > 254) {
    break;
  }

  $ips[] = $octets[0] . '.' . $octets[1] . '.' . $octets[2] . '.' . $i;
}