Mailinglisten-Archive |
Hi, Design schrieb: >> Design schrieb: >>> Gibt es unter PHP eine einfache lösung einen SQL Dump einzulesen >>> inkl. Tabellendefinition,Daten u.s.w.? > Also : > 1. mySQL > 2. DBDUMP mit phpmyAdmin > 3. Ich möchte diesen Dump möglichst systemübergreifend einspielen. Es > handelt sich dabei um ein Config Tool. Dieses soll möglichst auf jedem > Server laufen. Auch mit geringen Rechten ok. Also eine Möglichkeit wäre natürlich, den Dump dann mit einer phpMyAdmin-Installation wieder einzuspielen. Da hier allerdings die Dump-Datei dann vorzugsweise über phpMyAdmin hochgeladen werden müßte, würde das bei sehr großen Dumps Probleme geben, deren Größe den Wert von upload_max_filesize überschreiten. Bliebe also die Möglichkeit, die Dump-Datei z.B. per FTP hochzuladen und dann mit einem PHP-Skript auszulesen und die ausgelesenen SQL-Befehle dann über PHP auszuführen. Da auch hier die Dateigröße zu bedenken ist - große Dump-Dateien kannst Du nicht einfach auf einen Schlag in eine Variable packen -, solltest Du die Dump-Datei also öffnen und Zeilenweise durchgehen. Zeilen mit "#" am Anfang und leere Zeilen läßt Du aus. SQL-Befehle in phpMyAdmin-Dumps beginnen immer mit DROP, CREATE, INSERT, UPDATE oder REPLACE und enden mit einem Semikolon. Wenn Du also eine Zeile erwischt, wo eines dieser Schlüsselworte am Anfang steht, füllst Du diese Zeile und die nachfolgenden Zeilen, in eine Variable ab - bis zu der Zeile einschließlich, die mit einem Semikolon endet. Dann führst Du den SQL-Befehl mit PHP aus, leerst anschließend die Variable wieder und fährst dann ebenso mit dem nächsten SQL-Befehl fort, bis Du am Ende der Datei angekommen bist. :-) Das Ganze ist sicher nicht die performanteste Lösung. Die ginge über die Kommandozeile. Die Laufzeit der hier aufgezeigten Lösung kann, gerade bei großen Dumps, um ein Vielfaches größer sein. Daher mußt Du darauf achten, daß Dein Skript ausreichend Laufzeit erlaubt bekommt. Stichwort: set_time_limit. Dabei ist - wenn ich mich recht erinnere - zu bedenken, daß set_time_limit nicht im Skript selbst zur Laufzeit gesetzt werden kann, wenn safe_mode auf ON gesetzt ist. Viele Grüße Lutz
php::bar PHP Wiki - Listenarchive