Avatar billede mantichora Nybegynder
19. marts 2007 - 16:46 Der er 13 kommentarer og
2 løsninger

Skrive til midten af en fil

Jeg vil gerne skrive en besøgslog til en XML-fil, som ser således ud:

<?xml version="1.0" encoding="UTF-8"?>
<log>
<index>
  <time></time>
  <ip></ip>
  <ua></ua>
  <referer></referer>
</index>
</log>

Problemet er jo at jeg bruger <log> som et upper level tag, så når jeg skal have skrevet et nyt index til filen, skal det skrives FØR </log>-tag'et.

Spørgsmålet:
Kan det gøres via PHP's filfunktioner UDEN at læse hele indholdet ind i en PHP-variabel, ændre det dér, og derefter skrive hele filen fra start? Jeg regner med at det vil tage alt for meget maskinkraft til at være en brugbar løsning.
Avatar billede jakobdo Ekspert
19. marts 2007 - 17:54 #1
Du kan ikke tilføje data uden først at indlæse hele filen.
Du kan prøve at kigge på: http://php.net/domxml
Der kan du tilføje elementer.
Avatar billede mantichora Nybegynder
19. marts 2007 - 18:02 #2
Tak for link :) Absolut brugbare funktioner.

Men normalt bruger jeg jo append-write - fopen("log.xml","a");
Hvis jeg læser hele filen ind og skriver den igen, vil det så ikke tage ekstremt lang tid at udføre handlingen, når der først kommer nogle hundrede indexes i loggen?

Jeg ved godt database ville være bedre, men det har jeg ikke lyst til at bruge her, da siden hurtigt skal kunne flyttes til et andet hotel, og det gør heller ikke så meget, da jeg ikke regner med at få særlig mange besøg (Det er en C.V. side). Men det holder jo heller ikke hvis jeg bringer serveren totalt i knæ og forsinker sidevisningen.
Avatar billede jakobdo Ekspert
19. marts 2007 - 18:05 #3
Jo, det vil komme til at tage lidt ressourcer!
Du burde evt. overveje at smide det i en database.
Det er som skabt til din opgave.
Avatar billede mantichora Nybegynder
19. marts 2007 - 18:18 #4
Jeg vil nu gerne beholde det i XML format, men så må jeg bare "tømme" filen i ny og næ.

Du svarede dog på mit spørgsmål. Der er tilsyneladende ingen måde at skrive midt i en fil, uden at slette den og lave en ny.

Du må gerne lægge et svar :)
Avatar billede johan.o Nybegynder
19. marts 2007 - 18:26 #5
Kunne du ikke evt. starte med at bruge en alm. txt. fil som du skriver til ?

F.eks. kunne du skrive følgende til filen hver gang du logger noget :

<index>
  <time></time>
  <ip></ip>
  <ua></ua>
  <referer></referer>
</index>

og så når du ønsker at læse din 'xml' fil tilføje :

<?xml version="1.0" encoding="UTF-8"?>
<log>

til starten, og :

</log>

til slutningen så er formatet jo xml og kan parses.

Blot en ide...absolut ikke testet...men det burde vel være muligt og samtidigt rimeligt hurtigt og let flytbart.

Mvh. Johan
Avatar billede johan.o Nybegynder
19. marts 2007 - 18:31 #6
Og faktisk behøver du jo ikke tilføje starten, den kan jo godt stå der i forvejen, du kan vel nøjes med at tilføje </log> til slutningen når du vil bruge filen....
Avatar billede mantichora Nybegynder
19. marts 2007 - 18:32 #7
Johan -> God idé :) Jeg har selv tænkt over lignende. Det ville kræve to filer, så vidt jeg kan se - en txt-fil med indholdet, og en php-fil som omdannede det til XML-format når jeg gik ind på den.

Med mindre der er en måde at få PHP til at parse siden, når jeg gik direkte ind på den... det må jeg lige kigge nærmere på.
Avatar billede johan.o Nybegynder
19. marts 2007 - 18:40 #8
Nu ved jeg jo ikke hvordan du arbejder med filen, når du skal kigge i den, men du kunne evt. blot lave en php funktion som :

1.henter din 'txt' fil
2.tilføjer </log> til filen
3.gemmer den som en xml fil
4.returnere filnavnet

så kan du arbejde med din xml fil mens den org. txt. fil stadig kan opdateres af nye besøg.

Mvh. Johan
Avatar billede mantichora Nybegynder
19. marts 2007 - 18:47 #9
Jeg tror jeg har fundet en metode jeg bedre kan lide.

Jeg har et php dokument: log.php - hvori der står følgende:

<?php
header("Content-type: text/xml");
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<log>';
include ("log.xml");
echo '</log>';
?>

Og i min log.xml har jeg så kun:

<item>
  <time>18-03-2007 12:52:11</time>
  <ip>127.0.0.1</ip>
  <ua>blah blah</ua>
  <referer></referer>
</item>

På den måde kan jeg hente log.php direkte i browseren, og den vil blive vist som et XML dokument.

Men du må også meget gerne lægge et svar, Johan :)
Avatar billede johan.o Nybegynder
19. marts 2007 - 18:50 #10
værsgo.

Mvh. Johan
Avatar billede mantichora Nybegynder
19. marts 2007 - 20:00 #11
jakobdo?
Avatar billede jakobdo Ekspert
19. marts 2007 - 21:51 #12
Hvis du synes jeg har været til hjælp, så får du svar her.
Avatar billede mantichora Nybegynder
19. marts 2007 - 22:37 #13
Du svarede trods alt på mit spørgsmål :)
Avatar billede johan.o Nybegynder
19. marts 2007 - 22:40 #14
Takker :)

Mvh. Johan
Avatar billede jakobdo Ekspert
20. marts 2007 - 07:59 #15
Jeg takker for point.
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