Помогите со скриптом

Статус
В этой теме нельзя размещать новые ответы.

Tele2

Гуру форума
Регистрация
14 Апр 2006
Сообщения
784
Реакции
95
Скрипт должен выводить массив из айпишников, заданный в $lines
Что не так?

Код:
<?
function cidrToIps($cidr) {
    list($base, $bits) = explode('/', $cidr);
    list($a, $b, $c, $d) = explode('.', $base);
    $i = ($a << 24) + ($b << 16) + ($c << 8) + $d;
    $mask = $bits == 0 ? 0 : (~0 << (32 - $bits));
    return array_map('long2ip', range($i & $mask, $i | (~$mask & 0xFFFFFFFF)));
}
 
function rangeToIps($range) {
    list($ip1, $ip2) = explode("-", $range);
    $ip1int = ip2long($ip1);
    $ip2int = ip2long($ip2);
    return array_map('long2ip', range($ip1int, $ip2int));
}
 
$all_ips = array();
 
function processLine($line) {
    global $all_ips;
    $line = trim($line);
    $ipRex = "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}";
    if (preg_match("#^".$ipRex."/[0-9]{1,2}$#", $line)) {
        $all_ips = array_merge($all_ips, cidrToIps($line));
    } elseif (preg_match("#^".$ipRex."-".$ipRex."$#", $line)) {
        $all_ips = array_merge($all_ips, rangeToIps($line));
    } else {
        $all_ops[] = $line;
    }
}
 
$lines = array('192.168.9.0/22', '192.168.8.45', '192.168.10.10-192.168.10.99');
 
foreach ($lines as $line) {
    processLine($line);
}
 
$filtered_ips = array_unique($all_ips);
 
?>
 
Дык нечему выводить то... ни одной функции вывода массива на экран не задано...
 
задай функцию вывода и посмотри что будет.
 
в конце
Код:
echo $filtered_ips;
 
результатом будет Array()
для вывода массивов нужно использовать print_r($filtered_ips);
 
А для тех кто любит красиво : var_dump($filtered_ips);
 
о да... шикарно выглядеть будет запись
array(3) { [0]=> string(14) "192.168.9.0/22" [1]=> string(12) "192.168.8.45" [2]=> string(27) "192.168.10.10-192.168.10.99" }
вот только на кой нужна лишняя инфа? Если уж нужно красиво, то лучше разобрать массив по элементам с помощью foreach и вывести в каком угодно виде...
 
array можно вывести ещё так: print_r( $array_value );
если array всегда из 3-ёх элементов то можно сделать вывод так: $filtered_ips[0] , $filtered_ips[1] , $filtered_ips[2]
разультат можно помостреть

проверку элемента можно сделать так
if( isset($filtered_ips[0]) AND $filtered_ips[0] !== "" ){
echo $filtered_ips[0];
} else {
echo "Пусто";
}
 
вот так будет красиво:
PHP:
 foreach($filtered_ips as $arr)
  {
    echo $arr."<br>";
  }
 
:D
Ага а если поставить XDdebug и сделать var_dump то ваще шикарно будит :D
Простая распечатка масива а столько флуда вокруг этого что я аж не удержался....
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху