2011-10-08 46 views
-2

我有一個textarea:爆炸給定的IP範圍與PHP

<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來做?

回答

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); 
+0

A ++++++++,完美。好中之好。非常非常感謝你。它工作得很好。你很棒。謝謝 –

+0

完美,完美。非常感謝你。功能也很棒。它工作得很好。 A +++ –

0

你可以用ip2long來做到這一點。

將字符串轉換爲int,獲取最小和最大IP,在它們之間進行迭代並使用long2ip將它們呈現回來。

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; 
}