Как вы знаете, функция range () может получить диапазон между числом и другим,
как сделать то же самое с IP
как пример ..
$range_one = "1.1.1.1"; $range_two = "1.1.3.5"; print_r( range($range_one, $range_two) ); /* I want a result of : 1.1.1.1 1.1.2.2 1.1.3.3 1.1.3.4 1.1.3.5 */
я думал об использовании функции explode (), чтобы взорвать «.» и отделить каждый номер, а затем использовать диапазон с каждым из них, после чего объединить их все вместе, для меня это немного сложно, и я думаю, что есть более простой способ сделать это
Вы можете использовать ip2long для преобразования IP-адресов в целые числа. Вот функция, которая работает для старых IPv4-адресов:
/* Generate a list of all IP addresses between $start and $end (inclusive). */ function ip_range($start, $end) { $start = ip2long($start); $end = ip2long($end); return array_map('long2ip', range($start, $end) ); } $range_one = "1.1.1.1"; $range_two = "1.1.3.5"; print_r( ip_range($range_one, $range_two) );
Как насчет этого:
$range_one = "1.1.1.1"; $range_two = "1.1.3.5"; $ip1 = ip2long ($range_one); $ip2 = ip2long ($range_two); while ($ip1 <= $ip2) { print_r (long2ip($ip1) . "\n"); $ip1 ++; }
Обновить:
BTW, ваш ожидаемый результат не является точно диапазоном. Например, следующий IP после 1.1.1.1
равен 1.1.1.2
а не 1.1.2.2
.
Вы можете использовать inet_ntop, inet_ pton http://www.php.net/manual/en/function.inet-ntop.php