groot xml bestand met php uitlezen en in mysql zetten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rico

Rico

10/02/2009 01:40:00
Quote Anchor link
Hallo allemaal,

Ik moet grote xml bestanden verwerken met een grote van 20mb tot 60mb. Ik heb nu een script in elkaar gezet met domit. Alles werkt perfect zolang het xml bestand onder de 1 mb blijft. Als ik het 20mb bestand wil verwerken krijg ik een internal server error 505.

Nu vraag ik me af of ik niet beter een andere manier van verwerken kan gebruiken die deze grote bestanden wel kan verwerken. Ik heb een poging gedaan met simplexml, maar kom daar niet uit.

Iemand tips en/of ideeën voor me hoe ik het beste dit kan aanpakken?

Het moet als volgt werken. Bestand wordt opgehaald van een externe server. Script leest het xml bestand lokaal en ordend de gegevens en zet ze in de mysql database.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  <?xml version="1.0" encoding="ISO-8859-1" ?>
- <pricelist version="2.0">
  <title></title>
  <link></link>
  <description></description>
  <lastBuildDate></lastBuildDate>
- <item>
  <productid>a</productid>
  <name>a</name>
  <supplier>a</supplier>
  <subcategory>a</subcategory>
  <category>a</category>
  <price>1</price>
  <qty>1</qty>
  <vendorcode>a</vendorcode>
  <eancode>00000</eancode>
  <expdeldate>2009-01-01</expdeldate>
  <hotdeal>0</hotdeal>
  <opisop>0</opisop>
  <opruiming>0</opruiming>
  <image_small />
  <image_big />
  <descn>a</descn>
  <verwijderingsbijdrage>0.0</verwijderingsbijdrage>
  <backtoback>0</backtoback>
  <daily_price>0</daily_price>
  <end_of_life>0</end_of_life>
  </item>
- <item>
  <productid>b</productid>
  <name>b</name>
  <supplier>b</supplier>
  <subcategory>b</subcategory>
  <category>b</category>
  <price>2</price>
  <qty>2</qty>
  <vendorcode>b</vendorcode>
  <eancode>00000</eancode>
  <expdeldate>2009-01-01</expdeldate>
  <hotdeal>0</hotdeal>
  <opisop>0</opisop>
  <opruiming>0</opruiming>
  <image_small />
  <image_big />
  <descn>b</descn>
  <verwijderingsbijdrage>0.0</verwijderingsbijdrage>
  <backtoback>0</backtoback>
  <daily_price>0</daily_price>
  <end_of_life>0</end_of_life>
  </item>


Mocht de enigste oplossing simpleXML zijn, zou iemand me dan een klein voorbeeldje kunnen geven om de losse vars eruit te krijgen met simpleXML?

Alvast bedankt voor jullie tijd en moeite.
 
PHP hulp

PHP hulp

23/12/2024 04:38:41
 
Rolf

Rolf

10/02/2009 09:22:00
Quote Anchor link
Misschien dat je ergens een config file van/op je server moet aanpassen?
 
Rico

Rico

10/02/2009 13:33:00
Quote Anchor link
Ik heb in php.ini 512mb aangegeven en een verwerktijd van 240 seconden. Maar met het bestand van 20mb stopt hij al na 10 seconden.
 
Seppie

seppie

10/02/2009 23:00:00
Quote Anchor link
Ik loop nu tegen hetzelfde probleem aan. Internal server error bij het werken met XML bestanden uit een rss feed.
Op een andere hostingomgeving waar ik even toegang toe heb gehad, werkt het gewoon zonder problemen.
Kan ik nog iets met een .htaccess bestand regelen?
 
Jelmer -

Jelmer -

10/02/2009 23:22:00
Quote Anchor link
Zou het beter lukken met een XML Pull parser? Dat is een parser die het bestand van boven naar beneden leest, en bij iedere node die hij tegen komt even stopt en kijkt wat hij moet doen. In tegenstelling tot DOM XML of simplexml hoef je dan niet het hele document tegelijkertijd in het geheugen te hebben.... geloof ik :)

Je zou XMLReader of de oude XML Parser van PHP kunnen proberen. Die geef je functies mee die moeten worden aangeroepen, en dan kan je je document node voor node doorwandelen. Een beetje zoals je dat ook met bijvoorbeeld een result set van MySQL zou doen. Dan hoef je maar één compleet item in je geheugen te hebben in plaats van het hele document.
 
Rico

Rico

12/02/2009 23:57:00
Quote Anchor link
Ik heb heel weinig ervaring met XML en was al blij dat ik het met domit voor elkaar kreeg. Maar we zullen eens kijken of we ergens kunnen komen met XMLReader. Want jah eigenlijk het enigste wat het script moet doen is een xml bestand checken met de sql db en als er dingen veranderd zijn aanpassen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.