sdfkvsdnlk: gzip gepackte mysql-dumps einspielen wirft Fehler aus

Beitrag lesen

Jetzt wollte ich eines davon über php wieder einspielen, das wirft aber einen fehler aus. Was mache ich falsch?

  1. Du sagst nur, es würde ein "Fehler ausgeworfen", aber benennst den Fehler nicht, und hoffst jetzt, irgendwer möge eine Glaskugel mit direkter Verbindung zu deinem Skript haben.

  2. Du verwendest ein Skript, das Fehlerausgaben unterdrückt bzw. durch ein nichtssagendes "Es ist ein Fehler aufgetreten" ersetzt, und hoffst jetzt, irgendwer möge eine Glaskugel mit direkter Verbindung zu deinem mysql haben.

system('/bin/gunzip -c ' .$file. ' | /usr/bin/mysql -u' .$db_user. ' -p' .escapeshellarg($db_pass). ' -h' .$db_host. ' ' .$db_name. ' ', $fp);
if ($fp==0) {
    echo "Daten importiert";
} else {
    echo "Es ist ein Fehler aufgetreten";
}

Mal abgesehen davon, dass dieses Skript jegliche hilfreiche Ausgabe von /usr/bin/mysql unterschlägt, scheint system() der Anleitung nach eine generell unbrauchbare Funktion zu sein, denn selbst wenn man die Ausgabe verwerten würde, man bekäme immer nur die letzte Zeile. Das kann manchmal zu wenig sein.

Verwende exec(), und verwende dort den Parameter output. mysql schreibt Fehler vermutlich in die Fehlerausgabe; möglicherweise hilft das Ergänzen von '2>&1' am Ende, um die Fehlerausgabe in die von exec() in output geschriebene Standardausgabe umzuleiten.

(Ob der Name fp für den Rückgabewert eine kluge Wahl ist – meist steht er als Abkürzung für filepointer, sowas wird hier aber nicht zurückgegeben –, ist wohl Geschmackssache.)