PHP CSV-Import Limits

Daniel_CB

Aktives Mitglied
Hallo @all,

Ich habe jetzt schon eine weile gegoogelt und leider keine passende Antwort zu dem Thema gefunden.
Ich habe einige CSV Dateien die ich gezippt von einem Server (Zanox / Affilinet) herunterlade. Nach dem entpacken sind einige 800MB groß.
Ich lade jede einzelne CSV Dateie mit dem Befehl "fgetcsv" in ein Array und werte dieses dann aus.
kann ich bei solchen größen das Speicherprobleme Lösen, da der Server stellenweise dermassen in die Knie geht das die Seite nicht mehr erreichbar ist. Habe per INI-Flag dem script einen Speicherbedarf von 600MB zugewiesen und eine Scriptlaufzeit von 3h.

ROOT Server
1GB RAM
Apache 2.0;
PHP 5;
MYSQL 5.1

MFG

Daniel
 
Du musst die Datei einfach mit einem selbst geschriebenen Script abarbeiten. Wenn man die Datei auf einmal einliest braucht das natürlich massig speicher.
Zeile für Zeile einlesen und auswerten (und dann wohl in die Datenbank schreiben) sollte das Speicherproblem eigentlich lösen.

 
Hast du einen externen Zugriff auf die DB? Ich würde das ganze auf keinen Fall mit PHP lösen - dafür ist PHP schlichtweg ungeeignet.
 
Ich habe volle Rootrechte bei dem Server
und kann mit der DB machen was ich will.

Ein weiteres Problem dabei ist das diese Produktdaten in meinen Kategorienbaum eingelesen werden müssen.

Sprich ich muss "Freizeit & Hobby > Spiele" in der Datenbank suchen weil ich einen eigenen Kategorienbaum habe. Doch wenn er den Datensatz nicht findet wird das Produkt nicht eigetragen stattdessen soll ich die Kategorienzuordnungsliste diese Kategorie eigetragen werden mit einer kategorien ID mit dem wert "NULL" so das ich im Adminpanel sehe das eine neue Kategorie hinzugekommen ist und ich diese Zuordne. Beim nächsten durchlauf des Updates ist Sie dann vorhanden und das Produkt wird eingetragen. Habe mir dafür eine gute Datenbankstruktur einfallen lassen zwecks der Möglichkeit der Preisvergleiche und um über Gruppierung von Produkten über den EAN-Code die eigentliche Beschreibung nur einmal speichern zu müssen. Das sollten denk ich mir enorm Speicherplatz einsparen.

MFG Daniel
 
Das geht auch mit PHP ohne Probleme, einfach mit fread einlesen, sobald du eine Zeile zusammen hast die abarbeiten und den Überhang an das nächste eingelesene vorne anfügen.

So hast du nie ein Speicherproblem und es geht dadurch auch viel schneller.
 
Zurück
Oben