Hallo ihr :)
Ich habe eine knapp 4 GB große Textdatei (SQL-Dump), den ich importieren möchte. Die Datenbank existiert schon, nur leider steht nach div. Kommentaren in Zeile 20 des Dumpts ein "CREATE DATABASE XY" und darunter dann ein "USE XY". Dies konnte ich nur herausfinden, indem ich die Datei heruntergeladen habe um den Download nach 2 Sekunden zu beenden, so hatte ich nur einen 200-kb-Schnipsel.
Die Datenbank XY existiert jedenfalls auf dem Server nicht und ich kann sie auch nicht anlegen, da ich auf den Datenbanknamen keinen Einfluss habe.
Ich möchte Sie auf der Konsole importieren und habe sie auch schon so auf dem Server liegen.
Nun stellt sich die Frage, wie ich diese 2 Zeilen ausgetauscht bekomme.
Selbst wenn ich sie auf meinen lokalen Rechner lade, kenne ich keinen Editor, mit dem ich eine solch große Datei öffnen, geschweige denn bearbeiten könnte (plus 2 Wochen Uploadzeit wieder...)
Vi (auf der Konsole) kann damit auch nicht umgehen, ein Versuch und er setzt die Datei auf Null, alleine schon wenn ich sie aufrufe.
Bleibt PHP, dachte ich. Aber alleine ein file() würde logischerweise schon mind 4 GB RAM benötigen, einmal an "CREATE DATABASE" exploden => 8 GB. Plus die Rechenleistung um das zu machen, 4/8 GB sind nur der reine Speicherverbrauch der Daten.
Um es kurz zu fassen: Kennt jemand eine Möglichkeit, in PHP nur bestimmte Zeichen/Zeilen einer Datei auszulesen bzw. zu überschreiben, ohne dass der Rest der Datei ausgelesen wird? Also eben nicht eine funktion, die die Datei komplett einliest und danach die gewünschten Zeilen extrahiert, sonst habe ich ja wieder 4 GB im RAM.
Der Server hat 4 GB RAM, hat ja aber nebenher auch noch was zu arbeiten, deswegen wäre mir eine andere Lösung lieber.
Danke, Peter :)