Avatar billede r.hegaard Nybegynder
09. april 2004 - 19:28 Der er 14 kommentarer og
3 løsninger

Backup af gæstebog

Min gæstebog er lavet i php og har en txt-fil som "database".
Fornylig oplevede jeg, at hele indholdet i filen blev slettet. Jeg kan ikke finde ud af hvordan det er sket, men jeg regner med, at det er sket i forbindelse med at der var en der skev i gæstebogen. Jeg havde heldigvis taget backup kort inden, så det var hurtigt at få det til at køre igen.

Jeg vil gerne kunne køre automatisk backup på en eller anden måde. Jeg havde forestillet mig, at hver gang der blev skrevet i gæstebogen, så blev der lavet en kopi af txt-filen inden. Når der så efter 4 indlæg er kommet fire backupfiler, så skal den ælste slettes/overskrives.
Er det nogle der kan hjælpe med noget kode, som på en enkel måde kan gøre det ??

Er der også evt. nogle der har en idé om, hvad der kan gøre, at det hele bliver slettet ??
Avatar billede billen Nybegynder
09. april 2004 - 19:39 #1
Det er svært at svare på hvorfor det hele bliver slettet, da du ikke har vist os din kode. Men et gæt kunne være at du indlæser hele indholdet fra filen, tilføjer det nye indlæg og skriver til filen igen med

$fd = fopen( "filnavn", "w" ); // Nulstiller filen og starter forfra.
fwrite( $fd, $ALLE_INDLAEG );
fclose( $fd );

Hvis det er tilfældet kan du i stedet bruge:

$fd = fopen( "filnavn", "a" ); // Tilføjer til slutningen af filen
fwrite( $fd, $KUN_DET_NYE_INDLAEG );
fclose( $fd );

(Det var ikke en løsning til backup ;o)
Avatar billede billen Nybegynder
09. april 2004 - 19:47 #2
... og fejlen ved at bruge $fd = fopen( "filnavn", "w" ); er, at hvis $ALLE_INDLAEG er tom af en eller anden årsag, så bliver filen også tom. Med den sidste løsning er det kun det sidste nye indlæg der ikke kommer med.
Avatar billede bromer Nybegynder
09. april 2004 - 20:04 #3
Jeg kan ikke se nogen grund til at du vil opbevare 4 kopier af din gæstebog. Du kan nøjes med een enkelt. Når du så har tilføjet til din gæstebog og verificeret at det er korrekt kan du kopire din nye gæstebog over i din backup.

Bromer
Avatar billede dennismp Nybegynder
09. april 2004 - 20:26 #4
Nu ved jeg ikke hvor meget aktivitet du har i din gæstebog, men hvis det går galt igen, så skal der kun 4 indlæg til, før du har samme problem.

Hvad med at lave en kopi hver dag?

Men det bedst er self. at få rettet fejlen der har ødelagt din gæstebog :).
Laver scriptet en lås på filen? (Søg efter flock). Har du ikke mulighed for at bruge mysql?
Avatar billede bromer Nybegynder
09. april 2004 - 20:38 #5
Ja.. eller en eller anden base.. Du kan sikkert også finde en XML handler med noget lir pakket udenom så den næsten virker så en database for dig... det er helt sikkert bedre end at du definerer dit eget format og skal rette i filen selv.
Avatar billede r.hegaard Nybegynder
09. april 2004 - 20:38 #6
billen > Ja, det er rigtigt, at den genskriver hele filen hver gang. Jeg må hellere overveje at gøre det ved at tilføje i bunden hver gang, det vil dog nok give lidt omskrivning af kode, da de første står først lige nu.....

bromer> Grunden til, at jeg vil have 4 kopier er, at der evt. kan gå lidt tid inden jeg opdager hvis der er noget galt. I den tid kan der nå at komme flere nye indlæg, og derfor synes jeg det kunne være praktisk, hvis der lå flere backup-filer....

Jeg har iøvrigt også et andet lille problem. Når txt-filen kommer op på 200KB, så er der problemer med at skrive til filen. Er der evt. nogle der har en idé til hvad det kan være ??
Avatar billede r.hegaard Nybegynder
09. april 2004 - 20:44 #7
Ja, jeg har mulighed for at bruge mysql-database, men jeg har ikke sat min ind i hvordan man bruger sådan en, så derfor vil jeg hels brug en txt-fil indtil videre.
Avatar billede dennismp Nybegynder
09. april 2004 - 20:50 #8
Problemet med txt-filen er at man skal passe på at to apache-processor ikke skriver til filen samtidigt, hvilket ødelægger filen. SQL-databasen kan klare den slags og gør arbejdet noget nemmere i længden (så snart du har fået det til at virke).

Men du skal nok kigge lidt på flock-rutinerne og så sikre dig at kun een skriver til filen ad gangen.
Avatar billede coderdk Praktikant
10. april 2004 - 00:00 #9
Det kan ske hvis du ikke LÅSER filen når du skriver!

se http://dk.php.net/flock

Bruges sådan:

$fp = fopen('fil.txt','a');
flock($fp,LOCK_EX);
fwrite($fp,'Ny text!');
flock($fp,LOCK_UN);
fclose($fp);
Avatar billede dennismp Nybegynder
10. april 2004 - 00:39 #10
Det er jo det jeg siger :)
Avatar billede r.hegaard Nybegynder
10. april 2004 - 08:20 #11
Jeg er ikke helt med på, hvad det gør, når man låser filen ??
Avatar billede dennismp Nybegynder
10. april 2004 - 12:58 #12
Det gør, at kun een kan skrive til filen ad gangen. Hvis andre prøver, vil flock() få processen til at stoppe indtil filen ledig igen. Så undgår du dermed at flere processer arbejder på samme fil samtidigt.
Avatar billede -xyz- Nybegynder
10. april 2004 - 18:14 #13
indsæt denne kode inden der skrives til filen...
$dir = getcwd();
$sti_til_dir = "$dir/backup/";
copy("".$dir."/fil.txt", "".$sti_til_dir."/fil.txt");
Avatar billede dennismp Nybegynder
10. april 2004 - 18:24 #14
Har du ikke noget kode vi kan se på, hegaard?
Avatar billede r.hegaard Nybegynder
10. april 2004 - 22:14 #15
dennismp> Jo, det har jeg, men det skulle vel ikke være nødvendigt med de oplysninger jeg har fået nu.....

Jeg vil prøve at se om jeg kan få det til at virke, og derefter vende tilbage...
Avatar billede r.hegaard Nybegynder
11. april 2004 - 12:52 #16
Jeg har nu lavet, så min gæstebog laver backup og så den låser filen. Det kører fint, men jeg kan selvfølgelig ikke vide om den kan gå ned igen, men det må jeg jo se.
Tak for hjælpen.
Er der evt. lidt flere end coderdk og -xyz- der mener, at de har fortjent point ??
Avatar billede dennismp Nybegynder
11. april 2004 - 12:55 #17
Det var så lidt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester