Warum kein aussagekräftiges feedback durch exec() oder system() ?

scanline

Erfahrenes Mitglied
Hallo,
ich habe ein Script geschrieben mittels dessen ich per system() ein
DB-Dump (Backup) ziehen kann. mit exec() funktionierts genau so.
Funktioniert auch einwandfrei. Was ich noch brauche ist die Möglichkeit
der Überprüfung ob das backup tatsächlich gezogen wurde! Es kann ja
sein, dass die MYSQL-DB gerade mal down ist. Der Rückgabewert ist immer
0, ob das Backup möglich war oder nicht.
Die Theorie sagt, dass false zurückgegeben wird, wenn der Befehl nicht
ausgeführt werden konnte. Jetzt habe ich doch dezente
Verständnisprobleme...
Wer kann mir das erklären?

VG
Michael Jauernig
 
string exec ( string befehl [, array ausgabe [, int return_var]])

exec() führt ein gegebenen Befehl aus, ohne eine Ausgabe zu erzeugen. Die Funktion gibt lediglich die letzte Zeile aus dem Befehlsergebnis zurück. Wenn Sie auf die direkte Rückgabe/ Ausgabe eines Befehls angewiesen sind, dann benutzen Sie stattdessen die Funktion passthru().

Ist der Parameter array angegeben, wird dieses mit jeder Zeile des Befehlsausgabe gefüllt. Beachten Sie, dass wenn das Array schon Elemente enthält, die Funktion exec() die Ausgabe an das Array anhängt. Wenn Sie dieses nicht wünschen, rufen Sie die Funktion unset () für das Array auf, bevor Sie es als Parameter der Funktion exec() übergeben.

Somit hast Du die Möglichkeit die Rückgabe des Dump-Scripts zu parsen, um daraus Schlüsse über den Erfolg oder Nichterfolg der Ausführung zu ziehen.

mfg, snuu
 
Jo, soweit die Theorie :-)
Ich bekomme als Rückgabewert für exec, system, oder passthru generell "0", ob die Ausführung des Befehls erfolgreich war oder net. Als Test habe ich einfach mal falsche USERNAME-PASSWORT-Daten verwendet, so dass die DB nicht angesprochen werden kann. Es gibt allerdings einen Fall in dem ich mal einen anderen Rückgabewert erhalte: Wenn ich den Befehl gänzlich weglasse :-)

z.B.:
$befehl="";
sytem($befehl,$feedback)
$feedback ist dann "2".

Übrigens ist bei exec() das zurückgegebene Array grundsätzlich leer.

Ist schon merkwürdig alles...
VG
Micha
 
Zuletzt bearbeitet:
Hast du es mal über Backticks probiert?
PHP:
$a_sysOutput = explode("\n",`dein kommandozeilen befehl`);
foreach($a_sysOutput as $v){
  echo $v."<br />\n";
}
 
$a_sysOutput = explode("\n",`dein kommandozeilen befehl`);
foreach($a_sysOutput as $v){
echo $v."<br />\n";
}

Hallo,
was genau meinst Du mit 'dein kommandozeilen befehl'
exec($execute, $array, $feedback);
oder
$execute
oder
$array
oder $feedback?

was auch immer ich einsetze, ich bekomme keine neuen Informationen.

Momentan sieht die Geschichte so aus:
$execute = $pfadzumysqldump." -u".$user." -p".$pwd." -h ".$server." ".$database." | ".$gzip." > ".$file;
exec($execute, $array, $feedback);

danach wird die .gz-Datei auf meine eMail geschickt...

$array ist immer leer, $feedback immer "0"

VG
MIcha
 
Zurück