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($sql, 1); // 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($sql, 1); // Substr tar bort första komma-tecknet.
mysql_query($query);