Visualizzazione dei risultati da 1 a 3 su 3

Discussione: consultare un log

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    3

    consultare un log

    Ciao a tutti.
    Faccio una premessa, sono un nuovo registrato del forum e mi sto avvicinando
    al linguaggio PHP per una piccola necessità, pertanto non sono molto ferrato in materia
    ma devo dire che mi sto appassionando. :-)
    Spiego il contesto, scusatemi in anticipo se sono molto prolisso.

    Su un server di produzione (unix) ho installato un software antispam, tale software genera un log giornaliero, esegue pertanto una compressione dei vecchi log in gunzip e ne mantiene la loro
    presenza fino al settimo giorno precedente.

    Per consultare questi log, da console utilizzo solo alcuni comandi, il cat, il gzcat ed il grep.
    questa è un esempio di riga di come è costruito il log:
    ********
    Mar 19 13:33:49 fw Spamilter[26763]: Rejected 201.79.138.72 <keleko@sushiran.com> <m.turbodelta@turboteam.it> DNSBL 'http://www.spamhaus.org'
    ********

    In questo caso, i campi interessanti da consultare sono i seguenti:
    ********
    Mar 19 13:33:49 -> data ed ora dell'evento
    Rejected -> intervento effettuato
    (ha solo quattro variabili: Rejected, Accepted, Valid?, Spam?)
    201.79.138.72 -> IP del sender
    <keleko@sushiran.com> -> sender
    <m.turbodelta@turboteam.it> -> destinatario
    DNSBL 'http://www.spamhaus.org' -> causa
    ********
    questo campo invece, non è di rilevo in quanto specifica l'hostname, il processo ed il PID.
    fw Spamilter[26763]:


    Pertanto, da console, se volessi consultare il log mi basta eseguire un comando come segue:

    per il log giornaliero:
    cat /var/log/spam.log | grep "Rejected"

    per un vecchio log:
    gzcat /var/log/spam.log.0.gz | grep "Rejected"

    In questo modo, mi visualizza SOLO le righe REJECTED, inutile fare vedere altri esempi per adesso. :-)

    Il largo utilizzo di tale comandi, mi ha spinto a creare un file di shell (.sh) che mi permette
    la scelta dei campi che vi ho descritto sopra, eccolo:
    ******
    #!/bin/sh
    field1='spam.log'
    echo -n "inserisci se 'Accepted' oppure 'Rejected'= " ; read field3 ;
    echo -n "inserisci elemento di ricerca libero o lascia vuoto= " ; read field4 ;
    echo -n "inserisci il numero di righe da visualizzare 99999 per tutte= " ; read field2 ;
    /bin/cat /var/log/$field1 | grep -m$field2 "$field3" | grep "$field4" | more
    *****

    Per evitare un IF THEN, mi sono creato un altro script shell IDENTICO ma con il comando gzcat
    per visualizzare i log compressi.


    Fatta questa premessa è sorta la necessità di dovere creare un tool in PHP per visualizzare il log
    giornaliero ed i logs compressi tramite browser e quì casca l'asino, non sono molto pratico.

    Ho iniziato (sbagliando) creandomi il form dei campi suddetti, in modo tale da posporli al comando
    in shell... ma non ho verificato se il tutto funzionava a dovere, (infatti non funzia bene), perciò
    ho lasciato perdere il form per gli input (per adesso) ed ho provato dei comandi "diretti" per verificare la fattibilità, adesso arriva la domanda. :-)

    Ho creato uno script shell "semplice" chiamato "test.sh", il quale non è che la mera esecuzione
    del comando precedente, eccolo:
    *******
    #!/bin/sh
    cat /var/log/spam.log | grep "Rejected"
    *******
    Poi, ho creato il seguente script in .php:

    *******
    <?php
    $output = shell_exec('/usr/local/sbin/test.sh');
    echo "<pre>$output</pre>";
    ?>
    *******

    Ecco la domanda: se eseguo il comando "test.sh" in console, l'output a video è:
    Mar 19 13:33:49 fw Spamilter[26763]: Rejected 201.79.138.72 <keleko@sushiran.com> <m.turbodelta@turboteam.it> DNSBL 'http://www.spamhaus.org'


    Se invece eseguo la pagina in .php l'output sul browser è:
    Mar 19 13:33:49 fw Spamilter[26763]: Rejected 201.79.138.72 DNSBL 'http://www.spamhaus.org'

    Praticamente, viene rimosso il testo racchiuso tra "<>", strano, perchè se tento di visualizzare il sorgente dal browser, i dati invece
    ci sono, in colore violaceo, ma ci sono...

    Come posso risolvere?
    Grazie in anticipo!!!
    :-)

  2. #2
    PHP mette a disposizione delle ottime funzioni di manipolazione di file e stringhe. Appoggiarsi ad uno script shell nel tuo caso e' inutile. Puoi fare tutto in PHP.

    Praticamente, viene rimosso il testo racchiuso tra "<>", strano, perchè se tento di visualizzare il sorgente dal browser, i dati invece
    Non viene "rimosse", è il browser a non effettuare il rendering corretto. Per verificarlo, controlla il sorgente della pagina visualizzata dal browser e scoprirai che il testo è completo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    3
    Ciao Filippo, grazie per avere risposto.
    Si, come ho già scritto, ho controllato il sorgente ed infatto il testo c'è..

    Un indicazione su come utilizzare SOLO php e non appoggiarsi allo script in shell, potresti darmela?
    Conosco APPENA il linguaggio PHP.
    Grazie in anticipo.
    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.