Avatar billede AnyFellow Mester
28. marts 2012 - 12:42 Der er 8 kommentarer og
1 løsning

Parsing af store xml-filer

Jeg har gennem længere tid brugt denne kode til at parse xml-filer:

$xml = file_get_contents('test.xml');
$p = xml_parser_create();
xml_parse_into_struct($p, $xml, $vals, $index);
xml_parser_free($p);


Det har fungeret rigtig godt, dog er jeg nu begyndt at få problemer pga. størrelsen af nogle af mine xml-filer.

Hvordan kan ovenstående laves om, således hele xml-filen ikke hentes ind i hukommelsen, men i stedet hentes linje for linje?

Resten af min kode anvender $vals og $index, så dem vil jeg meget gerne bevare.
Avatar billede vagnk Juniormester
28. marts 2012 - 13:10 #1
Hvilke problemer? Stopper den indlæsningen eller tager indlæsningen lang tid? Hvor store er dine filer?
Avatar billede AnyFellow Mester
28. marts 2012 - 13:32 #2
Den fil jeg arbejder med lige nu er 33MB. Det er ikke muligt for mig at ændre størrelsen, idet data hentes via en url der indeholder xml-filen.

Serveren melder fejl på hukommelsen, idet parsing af en fil af den størrelse anvender op mod 500 MB ram.
Avatar billede olsensweb.dk Ekspert
28. marts 2012 - 13:56 #3
jf http://www.webmasterworld.com/forum88/1768.htm
ref bluedevil     msg:1314300    11:20 pm on Sep 22, 2003 (gmt 0)
prøv med fread istedet
Avatar billede AnyFellow Mester
28. marts 2012 - 14:16 #4
fread melder også fejl på hukommelsen.
Avatar billede vagnk Juniormester
28. marts 2012 - 14:34 #5
Så er der jo file() som læser linjerne ind i et array, men helt ørligt tror jeg heller ikke den kan klare det.

Så jeg kan ikke se andet end at læse filen linje for linje med fgets().

Men jeg kan ikke lade være med at spekulere på om du har et cache-problem? Hvilket styresystem er der på serveren? Har hotellet sat en begrænsning?
Avatar billede AnyFellow Mester
28. marts 2012 - 14:46 #6
Det ser ud til at file() kan klare opgaven.

Serveren er et Webhotel business hos Wannafind.
Avatar billede AnyFellow Mester
28. marts 2012 - 17:04 #7
vagnk...> Det er vel meget normalt at der er en memory limit, i dette tilfælde på 128 MB.
Afhængig af kompleksitet i xml'en, har jeg før set en xml-fil på 20 MB bruge på den forkerte anden side af 256 MB hukommelse.

Læg et svar og pointene er dine.
Avatar billede vagnk Juniormester
28. marts 2012 - 17:09 #8
Det er osse derfor jeg har mistanke til cache.
Avatar billede AnyFellow Mester
31. marts 2012 - 19:30 #9
Lukker
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