Visa ett inlägg
Oläst 2012-10-11, 00:40 #7
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Uppenbarligen så är XML filen stor, du sparar både den och dess objekt i minnet.

Så beroende på hur servern är konfigurerad (memory_limit) så kommer detta att resultera i fel. Likaså timeout på scriptet.

Jag skulle råda dig i att stycka upp filen. Kan vara allt från att du lagrar informationen i omgångar till att köra xx antal rader åt gången.

Testa till exempel att skriva ut data emellanåt samt att se till att variabler återanvänds/NULL:as när dom inte längre används.



Har du tex det så här:
PHP-kod:
$xml simplexml_load_file(...); // 50MB stor fil
$rows $data $xml
Så förbrukar du 150MB. Nu är det lite extremt men vill få fram en poäng.


Titta även på att köra MySQL frågorna med multiple inserts istället en fråga per iteration. Tex.
PHP-kod:
$insert 'INSERT INTO table (field1, field2, field3, ...) VALUES ';
$sql '';
$x 0;
while(...) {
   
$x++;
   ...

   
$sql .= ', (id, value, name, ...)';

   if(
$x == 150) {
      
$query $insert substr($sql1); // Substr tar bort första komma-tecknet.
      
mysql_query($query);
      
$query $sql ''// Nollställ variablar
      
$x 0;
   }
}
// Viktig - lägg in de sista posterna
$query $insert substr($sql1); // Substr tar bort första komma-tecknet.
mysql_query($query); 
Jonas är inte uppkopplad   Svara med citatSvara med citat