Report giornaliero

Nel sito a cui sto lavorando, dovrei inserire un report giornaliero di alcuni eventi, per lo più riferiti ad operazioni d' INSERT, UPDATE o DELETE.

Per fare ciò il sistema dovrebbe giornalmente, allo scattare delle ore 00.00, creare, automaticamente, un file di testo nominato gg/mm/yyyy, nel quale poter annotare con riferimento all'ora le operazioni svolte.

Ho pensato che ad ogni operazione effettuata, potrei inserire un controllo:

  if file exist() ....... else  fopen...().

Che ne pensate è una strada percorribile o si può fare di meglio?

Grazie Giovanni

inviato 10 anni fa
bonann23
X 0 X

devi crearti uno script che registra le query e le tiene in cache poi con CRON le salvi in un file ogni giorno a mezzanotte :D per il fatto di mettere in cache le query nn so proprio come fare :( non ho idee potresti creare un mega array contenente le query del giorno che poi viene salvato nel log dal CRON e poi viene svuotato :D

:bye:

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

per prima cosa ti serve creare una funzione "wrapper" per la funzione mysql_query:

function query($query)

{

   ...

   mysql_query($query);

   ...

ogni volta che devi eseguire una query devi chiamare la funzione query al posto di mysql_query. Questo ti serve per intercettare tutte le query eseguite dagli script.

Nella funzione wrapper devi controllare che la query sia di tipo INSERT, UPDATE e DELETE. Potresti farlo così:

if(in_array(strtoupper(substr($query, 0, 6)), array('INSERT','UPDATE','DELETE')))

{

   ...

se la condizione è verificata controlla se hai già aperto il file del giorno (questa potrebbe anche non essere la prima insert dello script!)

if(!$handle)

{

    ...

in caso non sia ancora aperto:

$handle = fopen($nome_file_del_giorno, "a");

Con la modalità "a" dici a php di creare il file se non esiste, altrimenti di accodare al contenuto preesistente del file i prossimi dati che andrai a scrivere.

Nota: $handle deve essre una variabile globale, inizializzata a false all'inizio dello script.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda