#php #explode
#php #explode
Вопрос:
у меня есть текстовое поле:
<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?
Ответ №1:
Я заметил, что первоначально опубликованный код был хорош для двух десятичных знаков, но только в том случае, если вам нужно использовать 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 />nr";
$numerator ;
}
}
// Call function
ipRange($input);
Комментарии:
1. A , идеально. лучший из лучших. большое, очень большое вам спасибо. это работает очень хорошо. вы великолепны. Спасибо
2. идеально, идеально. большое вам спасибо. функция тоже отличная. это работает так хорошо. A
Ответ №2:
Вы могли бы сделать это с помощью ip2long .
Преобразуйте вашу строку в int, получите минимальный и максимальный IP-адреса, выполните итерацию между ними и верните их обратно с помощью long2ip.
Ответ №3:
$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;
}