Lurifaksen Skrevet 2. august 2003 Del Skrevet 2. august 2003 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
Blib Skrevet 2. august 2003 Del Skrevet 2. august 2003 Ta en tredje løsning da. Lagre hele skjemaet i $fil via file() og ta en fopen(w, "w+") Så bruker du for() til å skrive inn innholdet i $fil igjen, etter at du har skrevet inn det nye du skal ha Lenke til kommentar
BlueEAGLE Skrevet 2. august 2003 Del Skrevet 2. august 2003 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
Lurifaksen Skrevet 2. august 2003 Forfatter Del Skrevet 2. august 2003 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
PlastBox Skrevet 4. august 2003 Del Skrevet 4. august 2003 <?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 ). Lenke til kommentar
BlueEAGLE Skrevet 4. august 2003 Del Skrevet 4. august 2003 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
Lurifaksen Skrevet 4. august 2003 Forfatter Del Skrevet 4. august 2003 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
diskvask Skrevet 4. august 2003 Del Skrevet 4. august 2003 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 ";"? 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
Lurifaksen Skrevet 4. august 2003 Forfatter Del Skrevet 4. august 2003 ; har spilt meg et puss før - flere ganger! Okay. Får prøve det... Lenke til kommentar
Lurifaksen Skrevet 4. august 2003 Forfatter Del Skrevet 4. august 2003 Haha... Jeg som sa at det var for mye ork å sette seg inn i mysql... Jeg logger nå til mySQL i stedet, og har brukt ca en fjerdedel av tiden å sette det opp på som jeg har brukt på feiling å prøving i det andre flat-file opplegget mitt. Et lite problem though... Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå