Функция диапазона ip?

Нужна функция, которая имеет два входных параметра - начальный IP и конечный IP.
IP адреса могут быть ipv4, ipv6.
Функция должна выводить список всех IP адресов, которые помещаются в указанный диапазон.
Помогите пожалуйста
пытался полученные ip разложить
$arr1 = explode(".", $startip);
$arr2 = explode(".", $endip);

и дальше увеличивать элементы массива на ++
по не могу вернуть массив с готовыми значениями видал к примеру 10.1.1.1 10.1.1.2 и так далее до 10.255.255.255
  • Вопрос задан
  • 706 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
php.net/manual/en/function.ip2long.php
php.net/manual/en/function.long2ip.php

то есть работаем с IP как с числом.

updated

добавил свой вариант функции:

function ipRange($startIp, $endIp) {
    $start = ip2long($startIp);
    $end = ip2long($endIp);

    return array_map(function ($ip) {
         return long2ip($ip); // нам не надо проверять эти условия с нулями и 255.
    }, range($start, $end));
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Caarl
@Caarl Автор вопроса
Реализовал вот так может кому пригодиться.
Сергей Протько спасибо за статьи очень пригодились.

<?php

function getip($start, $end)
{
    $start_ip = sprintf("%u", ip2long($start)); //// приводим к десятичному числу
    $end_ip = sprintf("%u", ip2long($end)); //// приводим к десятичному числу
    $ip = array(); // создаем пустой массив
    for ($i = $start_ip; $i <= $end_ip; $i++) // увеличиваем  на единицу
    {
        $temp = long2ip($i); //приводим число снова в ip(строку) с увеличением на единицу
        $arr = explode(".", $temp); //создаем массив из строки
        if ($arr[3] > 0 && $arr[3] <= 255) // выбираем значение которые нас интересуют

            $ip[] = $temp; // записываем эти значения в пустой массив
    }
    return $ip; // возвращаем одномерный массив
}
echo '<pre>';
print_r(getip("127.0.0.1", "127.0.2.255"));
echo '</pre>';

?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы