[php] uitlezen laatste 10 regels uit file

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Peopeo
  • Registratie: Juli 2001
  • Laatst online: 29-03-2022
Hallo,

Ik wil een soort guestbook maken met PHP waarbij alle berichten als regels worden weggeschreven in een tekst-file.

Ik wil voorkomen dat deze hele tekst-file ingelezen moet worden en dus wil ik met fget() alleen de laatste 10 regels inlezen.

Mijn vraag:
Hoe kan ik de pointer terug zetten?
(dus dat die van de laatste naar de ena-laatste regel springt, enzovoorts)


PS; Ik ga er vanuit dat op mijn manier dus niet de hele file wordt ingelezen omdat ik aan het eind begin; is dat zo?

Philips MSX 2 | NMS 8250 | 2 disk drives | 2 cartridge sloten | 256 Kb RAM | toetsenbord | TV connection | 3,58 MHz | geen hard disk |


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Veel OS-en zijn zo gebouwd dat ze de files van voor naar achter efficienter kunnen doornemen dan van achter naar voren.

Maar de pointer kan je in principe met de functie fseek terugzetten.
Nadeel is dat het alleen niet echt met regels, maar met posities werkt.

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Dit kan best lastig zijn. Je moet namelijk weten vanaf welke byte positie je moet gaan lezen. Je zou eraan kunnen denken om een aparte index file bij te gaan houden met byte posities.

Als je weet op welke byte positie de laatste 10 regels beginnen kun je vanaf die positie tot het eind gaan lezen. Dan zou je met www.php.net/fseek aan de gang moeten gaan.

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 13:20

BrZ

Is het misschien niet makkelijker om met 2 tekstfiles te werken, eentje met alle regels en eentje waar je de laatste 10 in hebt staan?

Dus elke keer als iemand ietsss post in beide files het erbij zetten en in de 2e file de 1e regel weghalen en bij het lezen dus alleen de volledige 2e file uitlezen

Acties:
  • 0 Henk 'm!

  • Peopeo
  • Registratie: Juli 2001
  • Laatst online: 29-03-2022
Hartelijk dank, ik zal eens in de fseek() duiken.

Rest mij nog wel de vraag; als ik een file open in append mode, leest ie dan de hele file in en zet ie de pointer op de laatste regel of opent ie de file en zet ie de pointer automatisch al op de laatste regel?

Ook verdere suggesties zijn natuurlijk welkom.

Philips MSX 2 | NMS 8250 | 2 disk drives | 2 cartridge sloten | 256 Kb RAM | toetsenbord | TV connection | 3,58 MHz | geen hard disk |


Acties:
  • 0 Henk 'm!

  • Peopeo
  • Registratie: Juli 2001
  • Laatst online: 29-03-2022
BrZ; Mooie oplossing, die gebruik ik!

Philips MSX 2 | NMS 8250 | 2 disk drives | 2 cartridge sloten | 256 Kb RAM | toetsenbord | TV connection | 3,58 MHz | geen hard disk |


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wat je evt wel kan doen is een keertje kijken hoe lang je regels gemiddeld zijn, dat hoef je maar eenmalig te doen of gewoon te schatten.

Vervolgens ga je steeds dat getal aan karakter-posities terug en het deel dat je teruggestapt bent lees je in met een fread (die dus max die stap aan tekens inleest) en check je of er een newline teken ("\n", niet '\n') in zat, als je dan 11x een newline teken tegen gekomen bent kan je dat loopje stoppen en de boel afdrukken.

De manier van BrZ is waarsch iets makkelijker :)

Acties:
  • 0 Henk 'm!

  • satyriasis
  • Registratie: Januari 2000
  • Laatst online: 08:35
Ik weet niet op wat voor systeem dit draait maar als het onder linux is kan je ook met ( ik geloof dat het zoiets was )

system("tail bestand.txt");

de laatste tien regels laten zien

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
satyriasis schreef op 17 March 2003 @ 00:46:
Ik weet niet op wat voor systeem dit draait maar als het onder linux is kan je ook met ( ik geloof dat het zoiets was )

system("tail bestand.txt");

de laatste tien regels laten zien
In principe werkt dat, ware het niet dat hij juist wil voorkomen dat de hele file wordt ingelezen. En tail doet dat volgens mij. Correct me if i'm wrong :)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Tail leest, bij mijn weten, niet de hele file in. Maar doet het iig behoorlijk efficient, als het dat wel doet.

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
ACM schreef op 17 maart 2003 @ 12:00:
Tail leest, bij mijn weten, niet de hele file in. Maar doet het iig behoorlijk efficient, als het dat wel doet.
In dat geval heb ik niets gezegd :)
Pagina: 1