CSV->MySQL ohne FILE

Wie kann ich eine größere CSV-Datei mit PHP in eine MySQL-Datenbank eintragen ohne in Timeouts und andere Probleme zu geraten?

Vollständige Frage unter http://stackoverflow.com/questions/16200091/how-to-u…

Bitte antworten Sie hier.

PS: Ich dachte an die FILE Option von MySQL, die kann aber nur die fertigen Daten nehmen, nicht die Bilder in der CSV-Datei konvertieren.

So I ask differently: Is there one library/framework that does
this task while avoiding all pitfalls like server restrictions,
timeouts, errors in csv-files etc.?

Ich bin mir ziemlich Sicher dass es das nicht gibt. Da wirst Du selbst programmieren müssen. Wenn es Fehler hat, musst Du debuggen. Da gibt es auch keinen Weg dran vorbei.

Zum Thema Timeout kann ich noch folgende Tipps geben:

  1. Überführe die CSV zuerst in eine Tabelle und nutze dann diese um den Job zu erledigen. Dort kannst Du ein Flag (Spalte) „bearbeitet“ setzen und damit den Job jederzeit unterbrechen und fortsetzen.
  2. Der Tipp 1 ermöglicht dir auch mit mehreren Threads zu arbeiten. Der SELECT kann dann mit MOD zB nur jeden x’ten Eintrag + Offset abarbeiten. So könntest Du den Job durch mehrere Threads deutlich beschleunigen.
  3. Bzgl. Timeouts kannst Du das Verhalten von PHP mit ini_set(‚max_execution_time‘, x) setzen.
  4. Lass doch das Script alle 58 Sekunden abbrechen und per Crontab alle Minute starten?

Grüße,

Kukulkan

  1. Importiere die Daten in MySQL
  2. Füge 2 neue Spalten hinzu: imageData="" und Done=0
  3. Lass ein PHP-Skript laufen welches die URL jeder Zeile ausliest, das Bild fetcht und es in imageData speichert
  4. Für jede fertige Zeile wird Done auf 1 gesetzt
  5. Skript so oft ausführen, bis keine Zeile mehr Done = 0 hat
  6. URL-Spalte ggf. löschen

Das ist ein sicherer Weg, der jegliche Timeout-Einstellungen überwindet.

Jemrija

Hallo donatus,

Wie kann ich eine größere CSV-Datei mit PHP in eine
MySQL-Datenbank eintragen ohne in Timeouts und andere Probleme
zu geraten?

In handliche Brocken aufteilen :wink:
Nein, tut mir leid, PHP ist nicht so mein Ding. Deshalb kann ich dir keine konstruktive Antwort geben.
Bestenfalls kannst du es ja mal in PHP mit

set\_time\_limit(0);

versuchen. keine Ahnung, ob das funktioniert.

Viele Grüße
Marvin

Habe es so gemacht und es funktioniert sehr gut. Danke.

Wie kann ich eine größere CSV-Datei mit PHP in eine
MySQL-Datenbank eintragen ohne in Timeouts und andere Probleme
zu geraten?

Na M@hlzeit!

Wie wäre es, allein den Pfad zur Datei in der DB abzulegen und diesen (den Pfad/das Verzeichnis) per Zugriffsrechten allein dem DB-Benutzer zugänglich zu machen? Mit Bildern macht man das gewöhnlich genauso, da gerade Bilder eine DB aufblähen können bis „zum nicht mehr laufen können“ (im buchstäblichen Sinn).

Hi,

sorry, diese Frage fällt mehr in den Bereich PHP (den ich nicht beherrsche). Was ich über den Import via PHP weiss: man muss einen Parameter in der php.ini hochsetzten wenn man größere Datenbestände (SQL - Files) hochladen will.

Sorry für die späte antwort.
Gruß

okay…