Gå til innhold

Skrive til fil - begynne på toppen, ikke på bunnen.


Anbefalte innlegg

Jeg har et script som logger inputs fra et skjema, til en txt fil.

Problemet er bare at den legger nye inputs på bunnen av filen.

Hvordan får jeg den til å legge nye på toppen i stedet?

 

Slik ser (den viktige delen av) scriptet ut:

 

$file = fopen ( "logg.html", "a" );



fwrite ( $file, "<b>Var1:	</b>$Var1<br/>" );

fwrite ( $file, "<b>Var2:	</b>$Var2<br/>" );



fclose ( $file );

 

Har prøvd å bruke fopen ( "logg.html", "r+"); også, men da bare skrev den over det innlegget som allerede var der.

Lenke til kommentar
Videoannonse
Annonse

Vel, jeg ville file()et tekstfilen og array_push()et på det nye innlegget. Etter det ville jeg fopen()et filen med "w" og laget en løkke med foreach().

 

Det ville sett slik ut.


$FilNavn="Tekst.fil"

$MinFil=file($FilNavn) or die("Kunne ikke lese $FilNavn");

array_push($MinFil, $Innlegg);

$FHandle=fopen($FilNavn, "w") or die("Kunne ikke åpne $FilNavn for skriving");

foreach($MinFil as $Value)

 fwrite($FHandle, $Value);

 

Håper det hjelper.

 

Men til slutt så vil jeg si at en mysql-database vil gjøre det mye enklere og kjappere. Når du har 10000+ innlegg så vil den rutinen jeg skrev ta en god del tid på serveren, og når fire personer prøver å sende sitt innlegg samtidig da så vil det ta tid!

Lenke til kommentar

BlueEAGLE:

 

Hmm.. Har prøvd det der nå i sikkert en halvtime, men jeg skjønner ikke hva $Innlegg og $Value er. Dvs, value er vel variablene fra skjemaet som skal skrives i filen, men hva er $innlegg?

 

MySQL er sikkert bra, men tror ikke jeg orker å sette meg inn i det nå. Et flat-file system holder nok fint, siden det ikke er så mye (eller ofte) data legges inn...

Lenke til kommentar

<?php

$filename="Tekst.fil" 

$a = file($filename) or die("Kunne ikke lese $filename"); 

array_push($a, $Innlegg); 

$fp = fopen($filename, 'w');

fputs($fp, implode($a, ''));

fclose($fp);

?>

 

Tror denne skulle funke noenlunde greit (gidder ikke teste :p).

Lenke til kommentar
BlueEAGLE:

 

Hmm.. Har prøvd det der nå i sikkert en halvtime, men jeg skjønner ikke hva $Innlegg og $Value er. Dvs, value er vel variablene fra skjemaet som skal skrives i filen, men hva er $innlegg?

 

MySQL er sikkert bra, men tror ikke jeg orker å sette meg inn i det nå. Et flat-file system holder nok fint, siden det ikke er så mye (eller ofte) data legges inn...

 

$innlegg er en variabel som inneholder innlegget som skal legges til.

 

Har du lest pA php.net om hva file() og foreach() gjQr?

Lenke til kommentar

PlastBox: Tror jeg gir opp nå...

 

unexpected T_VARIABLE i linjen 35:

 

34: $filename="logg.html"

35: $a = file($filename) or die("Kunne ikke lese $filename");

 

 

 

BlueEAGLE:

 

Tja, det er ikke akkurat innlegg som skal skrives til filen, men IP og klokkeslett, pluss to felter fra et skjema.

 

skal $innlegg være hele teksten som skal skrives i loggfilen?

 

Altså inkludert html og alt?

Noe slikt:

 

$innlegg = "$REMOTE_ADDR<br>$dag. $måned $klokkeslett<br><b>Fra:	</b>$fra<br><b>Melding :	</b>$melding<br /><br><br>

Lenke til kommentar


unexpected T_VARIABLE i linjen 35: 



34: $filename="logg.html" 

35: $a = file($filename) or die("Kunne ikke lese $filename");

 

Hva med å ende linje 34 med ";"? :shrug:

 

Men... jeg tror ikke plastbox sitt forslag vil funke uansett. array_push() legger jo $Innlegg bakerst i arrayet, og da må man jo snu om på hele arrayet ved array_reverse()

 

Det enkleste er vel å beholde scriptet for lagring som du har nå (dvs. nyeste innhold kommer bakerst), men bare å endre scriptet for lesing av fila. Og da ta i bruk array_reverse() like før du skriver ut data i fila.

 


/* f.eks: */

$FilNavn="Tekst.fil";

$MinFil=file($FilNavn) or die("Kunne ikke lese $FilNavn"); 

$MinFil = array_reverse($MinFil);

foreach($MinFil as $Value) 

 echo $Value . "<br>";

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...