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

Тема в разделе "PHP", создана пользователем Tele2, 8 янв 2012.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Tele2

    Tele2

    Регистр.:
    14 апр 2006
    Сообщения:
    784
    Симпатии:
    94
    Скрипт должен выводить массив из айпишников, заданный в $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);
     
    ?>
     
  2. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Дык нечему выводить то... ни одной функции вывода массива на экран не задано...
     
  3. mrperl

    mrperl Создатель

    Регистр.:
    9 янв 2012
    Сообщения:
    43
    Симпатии:
    2
    задай функцию вывода и посмотри что будет.
     
    Tele2 нравится это.
  4. fraktall

    fraktall Писатель

    Регистр.:
    29 июн 2011
    Сообщения:
    9
    Симпатии:
    1
    в конце
    Код:
    echo $filtered_ips;
     
    Tele2 нравится это.
  5. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    результатом будет Array()
    для вывода массивов нужно использовать print_r($filtered_ips);
     
    Tele2 нравится это.
  6. mikanewman

    mikanewman Создатель

    Регистр.:
    18 авг 2011
    Сообщения:
    16
    Симпатии:
    1
    А для тех кто любит красиво : var_dump($filtered_ips);
     
  7. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    о да... шикарно выглядеть будет запись
    вот только на кой нужна лишняя инфа? Если уж нужно красиво, то лучше разобрать массив по элементам с помощью foreach и вывести в каком угодно виде...
     
  8. antiterror

    antiterror xProgramming

    Регистр.:
    22 авг 2007
    Сообщения:
    344
    Симпатии:
    135
    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 "Пусто";
    }
     
  9. idimka

    idimka

    Регистр.:
    31 авг 2007
    Сообщения:
    219
    Симпатии:
    52
    вот так будет красиво:
    PHP:
     foreach($filtered_ips as $arr)
      {
        echo 
    $arr."<br>";
      } 
     
  10. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    351
    :D
    Ага а если поставить XDdebug и сделать var_dump то ваще шикарно будит :D
    Простая распечатка масива а столько флуда вокруг этого что я аж не удержался....
     
Статус темы:
Закрыта.