Ich habe ein PHP-Skript, das die MySQL-Verbindungsdetails eines Remote-Servers übergibt und ich möchte, dass es einen mysqldump
-Befehl ausführt. Dazu benutze ich die Funktion php exec()
:
Wenn die richtigen Login-Daten an ihn übergeben werden, wird es absolut funktionieren.
Ich habe jedoch Probleme beim Überprüfen von , wenn es wie erwartet ausführt und wenn es nicht herausfinden warum nicht.
Das $output
-Array wird als leer zurückgegeben, während, wenn ich den Befehl direkt in der Befehlszeile ausführe, eine Nachricht ausgedruckt wird, die mir sagt, dass die Anmeldung fehlgeschlagen ist. Ich möchte solche Fehlermeldungen erfassen und anzeigen. Irgendwelche Ideen, wie man das macht?
Sie sollten den dritten Parameter der Funktion exec überprüfen: &$return_var
.
Laut Konvention in Unix gibt ein Prozess etwas anderes als 0 zurück, wenn etwas schief geht .
Und so können Sie:
%Vor% Da diese Zeile die Ausgabe von stdout umleitet > /path-to-export/file.sql
versuch dies,
Ich habe genau die gleiche Lösung gesucht, und ich erinnerte mich, dass ich das schon vor ein paar Jahren gelöst hatte, aber vergessen hatte.
Da diese Seite in Google für die Frage hoch ist, hier ist, wie ich es gemacht habe:
%Vor%Es ist der - log-error = [/ Pfad / zu / Fehler / Protokoll / Datei] Teil von mysqldump, den ich immer vergesse!
Die Lösung, die ich gefunden habe, besteht darin, den Befehl in einer Untershell auszuführen und dann stderr
in stdout
auszugeben. Auf diese Weise ist $output
gut gefüllt.
d. :
%Vor%Die Ausgabe:
int (6)
array (1) {[0] = & gt; string (46) "mysqldump: Tabelle nicht gefunden:" Tabellenname ""}
Hoffe es hilft!
As exec()
holt nur stdout
, was zu der Datei umgeleitet wird, wir haben teilweise oder fehlende Ergebnisse in der Datei und wir wissen nicht warum. Wir müssen eine Nachricht von stderr
bekommen und exec()
kann das nicht tun. Es gibt mehrere Lösungen, alles wurde bereits gefunden, also ist dies nur eine Zusammenfassung.
mysqldump
protokollieren und separat behandeln (gilt nicht für jeden Befehl). mysqldump ... 2> error.log 1> dump.sql
, und lesen Sie das Fehlerprotokoll separat wie in der vorherigen Lösung. exec()
einfügen kann Die Variable $output
. proc_open()
anstelle von exec()
verwenden, da wir stdout
und stderr
bekommen können separat (direkt aus Rohren). Schreiben Sie den folgenden Code, um den Datenbank-Export in eine .sql-Datei zu erhalten.
%Vor%