Newsgroup: it.comp.www.php
Titolo: Re: "last" via php ...

 ciao, f.
Direi che, se non vuoi usare il tail, conviene utilizzare quantomeno
lo stesso algoritmo.
E' abbastanza banale (se riduci il problema ai soli file regolari e
senza follow). Basta leggere il file dalla fine a chunk, controllando
di volta in volta se nel chunk estratto ci sono dei caratteri di fine
riga. Ovviamente la dimensione del chunk è il parametro che da la
differenza di prestazioni - sulle coreutils se non ricordo male è
settato come la dimensione di pagina, ma su un'applicazione specifica
conviene impostarlo in base ai dati attesi.
Ciao!

 servono solo le ultime N (facciamo 10) righe ...
Non so cosa faccia fisicamente tail, probabilmente legge tutto il file 
contando gli a-capo, o usa la tecnica di cui sopra contandoli "a rovescio".
Bye.


Li conta "al rovescio" (sempre che si tratti di un file regolare e non
di una pipe, e che sia in modalità linee e non bytes).

 servono solo le ultime N (facciamo 10) righe ...
più efficiente di
fseek($file,-10,SEEK_END)
FYI: 
http://it.php.net/manual/en/function.fseek.php
ciao Gianmarco


Se hai 10 linee bianche in formato unix funziona ;)

> Ho capito male ?
no hai capito bene, pero' trovi un'implementazione di quello che cerchi
tra i commenti della pagina sul manuale ufficiale:
http://de3.php.net/manual/en/function.fseek.php
(cerca "read x lines from log file end"  )


No no, hai capito bene - il suggerimento era sbagliato.

 No no, hai capito bene - il suggerimento era sbagliato.
premesso che fseek non legge niente, ma posiziona il puntatore in una
posizione specifica del file, diciamo che non sai che cosa fa fseek,
chiuso con le premesse andiamo avanti.
Il primo esempio della pagina del manuale relativa a fseek
ha per titolo "easier tail() function for php"
e che la funzione implementata ottimizzata è nel secondo esempio
e che ho indicato la pagina del manuale dove trovare la risposta....
ho sbagliato, per distrazione, a scrivere il -10 per l'offset.
Ma né tu nè lui avete letto il manuale.
Non era la soluzione al problema, ma il punto dove partire per tovare
una soluzione.
Forse meglio che scrivere rileggi il file al contrario contando gli a
capo.
Ciao Gianmarco

 ho sbagliato, per distrazione, a scrivere il -10 per l'offset.
coič per distrazione confindi un -10 con 30 righe di codice?
rotfl
teikitisi


Ti sei offeso perchè ho scritto che il suggerimento era sbagliato?
Sono convinto che è stato per distrazione, ma non era giusto comunque.
E comqunque no, non ho letto la pagina del manuale php, anche perchè
uso la funzione fseek() da prima dell'invenzione del php :)
Oltretutto, tanto per togliermi il dubbio, la prima cosa che ho fatto
è stata un: tar xvjf coreutils-6.9.tar.bz2 && vim coreutils-6.9/src/
tail.c (che di certo da suggerimenti migliori della paginetta sul
sito).

 teikitisi
guarda, prendila come vuoi, nei post ho letto, "ma allora non prendo
gli ultimi 10 bytes?" che, non può essere una distrazione.
Ho iniziato scrivendo una chiamata di fseek a caso, poi mi sono messo
a scrivere le spiegazioni dei parametri, ad un certo punto mi sono
accorto che ci voleva un po' troppo e che era tutto scritto sul
manuale, tail inclusa e ho tagliato il testo e messo il link al
riferimento.
Non ho ricontrollato il post prima di fare invio, ma sai capita di
lavorare anche...
Ma tu che sei il tutor dei due?
Flaidaun
Ciao Gianmarco

 Ti sei offeso perchè ho scritto che il suggerimento era sbagliato?
no, non mi sono offeso, ho spiegato in altro post come è che ho
sbagliato, il suggerimento era la pagina del manuale non l'esempio
della chiamata di fseek.
Ciao Gianmarco

 Flaidaun
lol


non mi sono inalberato, ma essere preso per fesso non mi piace.
In genere non intervengo a caso, tanto per fare un post, la richiesta
mi sembrava interessante, e volevo dare una mano, forse avrei dovuto
fare il cut & paste del codice o scrivere la query di google che per
primo risultato indica la pagina del manuale o scrivere RTFM o almeno
rileggere prima di postare.
Rimane il fatto che leggere i manuali fa bene.
Ciao Gianmarco