The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"вывод из файла необходимых сообщений"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (PHP)
Изначальное сообщение [ Отслеживать ]

"вывод из файла необходимых сообщений"  +/
Сообщение от Иван email(??) on 05-Ноя-13, 18:10 
всем привет

нужен php скрипт который выводит в 1 строчку данные
есть файл такого плана

Nov  5 11:25:14 ivan-desktop pppd[2830]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Nov  5 11:25:14 ivan-desktop pppd[2830]: pptpd-logwtmp: $Version$
Nov  5 11:25:14 ivan-desktop pppd[2830]: pppd options in effect:
Nov  5 11:25:14 ivan-desktop pppd[2830]: debug#011#011# (from /etc/ppp/pptpd-options)
Nov  5 11:25:16 ivan-desktop pppd[2830]: local  IP address 192.168.10.2
Nov  5 11:25:16 ivan-desktop pppd[2830]: remote IP address 192.168.10.1
Nov  5 11:25:16 ivan-desktop pppd[2830]: pptpd-logwtmp.so ip-up ppp0 Ivan 192.168.10.5
Nov  5 11:25:28 ivan-desktop pppd[2830]: LCP terminated by peer (OIm^E^@<M-Mt^@^@^@^@)
Nov  5 11:25:28 ivan-desktop pppd[2830]: pptpd-logwtmp.so ip-down ppp0
Nov  5 11:25:28 ivan-desktop pppd[2830]: Connect time 0.2 minutes.
Nov  5 11:25:28 ivan-desktop pppd[2830]: Sent 229 bytes, received 3131 bytes.
Nov  5 11:25:28 ivan-desktop pppd[2830]: Modem hangup
Nov  5 11:25:28 ivan-desktop pppd[2830]: Connection terminated.
Nov  5 11:25:29 ivan-desktop pppd[2830]: Exit.

Из него необходимо вывести
1 время старта, это время взять из строки Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
2 имя пользователя и ИП машины, это взять из pptpd-logwtmp.so ip-up ppp0 Ivan 192.168.10.5
3 время конца, это время взять из строки pptpd-logwtmp.so ip-down ppp0

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "вывод из файла необходимых сообщений"  +2 +/
Сообщение от михалыч (ok) on 05-Ноя-13, 21:09 
>[оверквотинг удален]
> Nov  5 11:25:28 ivan-desktop pppd[2830]: Connect time 0.2 minutes.
> Nov  5 11:25:28 ivan-desktop pppd[2830]: Sent 229 bytes, received 3131 bytes.
> Nov  5 11:25:28 ivan-desktop pppd[2830]: Modem hangup
> Nov  5 11:25:28 ivan-desktop pppd[2830]: Connection terminated.
> Nov  5 11:25:29 ivan-desktop pppd[2830]: Exit.
> Из него необходимо вывести
> 1 время старта, это время взять из строки Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
> 2 имя пользователя и ИП машины, это взять из pptpd-logwtmp.so ip-up ppp0
> Ivan 192.168.10.5
> 3 время конца, это время взять из строки pptpd-logwtmp.so ip-down ppp0

<?php

$file = "/tmp/file";
$fp = fopen ( $file, "r" ) or die ( "Couldn't open $file" );

while ( ! feof ( $fp ) ) {
    $line = fgets ( $fp, 1024 );
    if ( preg_match ( '|Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded|', $line ) ) { preg_match ( '/\d{2}:\d{2}:\d{2}/', $line, $start ); }
    if ( preg_match ( '|pptpd-logwtmp.so ip-up ppp|', $line ) ) { preg_match ( '/(^.*ppp\d+\s)([a-zA-Z]*)\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/', $line, $array ); }
    if ( preg_match ( '|pptpd-logwtmp.so ip-down ppp|', $line ) ) { preg_match ( '/[0-9]{2}:[0-9]{2}:[0-9]{2}/', $line, $stop ); }
}

print $start = $start[0];
print $name  = $array[2];
print $ip    = $array[3];
print $stop  = $stop[0];

?>

Для строгой проверки регулярка IP не совсем правильная, но для "выдирания" сгодится

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "вывод из файла необходимых сообщений"  +1 +/
Сообщение от михалыч (ok) on 06-Ноя-13, 12:33 
Возьмите на perl

#!/usr/bin/perl

use strict;
use warnings;

my ($start, $name, $ip, $stop);
my $file = "/tmp/file";

open ( FH, $file ) or die "couldn't open $file : $!";
while ( <FH> ) {
    chomp;
    if ( m|Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded| ) { s/^.*(\d{2}:\d{2}:\d{2}).*$/$1/; $start = $1; }
    if ( m|pptpd-logwtmp.so ip-up ppp| ) { s/^.*ppp\d+\s([a-zA-Z]*)\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/$1$2/; $name = $1; $ip = $2; }
    if ( m|pptpd-logwtmp.so ip-down ppp| ) { s/^.*(\d{2}:\d{2}:\d{2}).*$/$1/; $stop = $1; }
}
close FH;

print $start, $name, $ip, $stop;

Попробуйте, вам понравится! ))

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "вывод из файла необходимых сообщений"  +/
Сообщение от pavel_simple (ok) on 06-Ноя-13, 12:54 
>[оверквотинг удален]
> Nov  5 11:25:28 ivan-desktop pppd[2830]: Connect time 0.2 minutes.
> Nov  5 11:25:28 ivan-desktop pppd[2830]: Sent 229 bytes, received 3131 bytes.
> Nov  5 11:25:28 ivan-desktop pppd[2830]: Modem hangup
> Nov  5 11:25:28 ivan-desktop pppd[2830]: Connection terminated.
> Nov  5 11:25:29 ivan-desktop pppd[2830]: Exit.
> Из него необходимо вывести
> 1 время старта, это время взять из строки Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
> 2 имя пользователя и ИП машины, это взять из pptpd-logwtmp.so ip-up ppp0
> Ivan 192.168.10.5
> 3 время конца, это время взять из строки pptpd-logwtmp.so ip-down ppp0

man last

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "вывод из файла необходимых сообщений"  +/
Сообщение от Иван email(??) on 06-Ноя-13, 14:21 
Спасибо примеры работают. А если файл выглядит следующим образом

Nov  6 10:18:47 ivan-desktop pppd[1784]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
**************************************************************************************
Nov  6 10:18:49 ivan-desktop pppd[1784]: pptpd-logwtmp.so ip-up ppp0 Ivan 192.168.10.5
Nov  6 10:19:12 ivan-desktop pppd[1820]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
**************************************************************************************
Nov  6 10:19:16 ivan-desktop pppd[1820]: pptpd-logwtmp.so ip-up ppp1 User 192.168.1.101
Nov  6 10:20:00 ivan-desktop pppd[1820]: pptpd-logwtmp.so ip-down ppp1
Nov  6 10:20:01 ivan-desktop pppd[1820]: Exit.
Nov  6 10:21:32 ivan-desktop pppd[1784]: pptpd-logwtmp.so ip-down ppp0
Nov  6 10:21:32 ivan-desktop pppd[1784]: Exit.

то выводится последние время старта и последние время закрытия соединения.
Т.е. есть 1 пользователь подключился (Ivan), потом подключился еще 1 пользователь (User), вначале отключился 2 пользователь, потом первый.
скрипт вывел
10:19:12 User 192.168.1.101 10:21:32

а нужно
10:18:47 Ivan 192.168.10.5 10:21:32
10:19:12 User 192.168.1.101 10:20:00

Помогите если не трудно, а то я с этим месяц разбираться буду

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "вывод из файла необходимых сообщений"  +1 +/
Сообщение от михалыч (ok) on 07-Ноя-13, 15:12 
Я же говорю, возьмите на perl

#!/usr/bin/perl

use strict;
use warnings;

my ( @data, @array, %stat_user );
my ( $start, $iface, $num, $name, $ip, $stop, $i );
my $max = 0;
my $file = "/tmp/file";

open ( FH, $file ) or die "couldn't open $file : $!";

while ( <FH> ) {
    chomp;
    push @data, $_;

    if ( /ip-up ppp(\d*)/ ) { $max = $1 if $1 > $max; }
}

close FH;

for ( $i = 0; $i <= $max; $i ++ ) {

    foreach ( @data ) {

        if ( /ip-up ppp$i/ ) {
            /^.*(\d{2}:\d{2}:\d{2}).*\s(ppp($i))\s([a-zA-Z0-9]*)\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/;
            $start = $1; $iface = $2; $num = $3; $name = $4; $ip = $5;

            @{$array["$i"]} = ("$start", "$name", "$ip") if defined($3);
        }

        if ( /ip-down ppp$i/ ) { /^.*(\d{2}:\d{2}:\d{2}).*\s(ppp($i))$/;
            $stop = $1; $iface = $2; $num = $3;
            push @{$array[$i]}, $stop if defined($3);
        }

    }

}

for my $arrayref (@array) {
    print join (" ", @{$arrayref} ), "\n" if defined ( length $arrayref );
}

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "вывод из файла необходимых сообщений"  +/
Сообщение от Иван email(??) on 07-Ноя-13, 22:38 
Михалыч, спасибо тебе огромное!

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "вывод из файла необходимых сообщений"  +/
Сообщение от михалыч (ok) on 09-Ноя-13, 16:37 
Что-то я намудрил в предыдущем посте.
Это как не надо делать. ))


Всё оказалость гораздо проще. Может ещё пригодится.

На perl

#!/usr/bin/perl

use strict;
use warnings;

my @array;
my $file = "/tmp/file";

open ( FH, $file ) or die "couldn't open $file : $!";

while ( <FH> ) {
    chomp;

    if ( /ip-up ppp\d+/ ) {
        /^.*(\d{2}:\d{2}:\d{2}).*\s(ppp(\d+))\s([a-zA-Z0-9]*)\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/;
        push @{$array[$3]}, "$1 $4 $5";
    }

    if ( /ip-down ppp\d+/ ) {
        /^.*(\d{2}:\d{2}:\d{2}).*\s(ppp(\d+))$/;
        push @{$array[$3]}, $1;
    }

}

close FH;

for my $arrayref (@array) {
    print join (" ", @{$arrayref} ), "\n" if defined ( length $arrayref );
}


На php

<?php

$file = "/tmp/file";
$fp = fopen ( $file, "r" ) or die ( "Couldn't open $file" );

while ( ! feof ( $fp ) ) {
    $line = fgets ( $fp );

    if ( preg_match ( '/ip-up ppp\d+/', $line ) ) {
        preg_match ( '/^.*(\d{2}:\d{2}:\d{2}).*(ppp(\d+))\s([a-zA-Z0-9]*)\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/', $line, $logon );

        $ifaces[$logon[3]] = array($logon[1], $logon[4], $logon[5]);
    }

    if ( preg_match ( '/ip-down ppp\d+/', $line ) ) {
        preg_match ( '/^.*(\d{2}:\d{2}:\d{2}).*(ppp(\d+))$/', $line, $logoff );

        array_push($ifaces[$logoff[3]], $logoff[1]);
    }
}

foreach ( $ifaces as $iface ) {
    foreach ( $iface as $val ) {
        print $val . " ";
    }
    print "\n";
}

?>

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "вывод из файла необходимых сообщений"  +/
Сообщение от михалыч (ok) on 09-Ноя-13, 18:49 
Массивчик распотрошить на php а-ля perl

foreach ( $ifaces as $iface ) {
    print implode ( " ", $iface ) . "\n";
}

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру