mysqldump über PHP

7

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() :

%Vor%

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?

    
Ross McLellan 26.07.2012, 23:02
quelle

6 Antworten

12

Sie sollten den dritten Parameter der Funktion exec überprüfen: &$return_var .

%Vor%

Laut Konvention in Unix gibt ein Prozess etwas anderes als 0 zurück, wenn etwas schief geht .

Und so können Sie:

%Vor%     
Fabio Mora 26.07.2012, 23:13
quelle
4

Da diese Zeile die Ausgabe von stdout umleitet > /path-to-export/file.sql versuch dies,

%Vor%     
Burak Tamtürk 26.07.2012 23:12
quelle
3

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!

    
Jon T 31.01.2014 14:26
quelle
3

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!

    
JazZ 13.10.2016 10:12
quelle
1

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.

  1. Lösung von Jon : Fehler von mysqldump protokollieren und separat behandeln (gilt nicht für jeden Befehl).
  2. Leiten Sie Ausgaben in separate Dateien um, d. h. mysqldump ... 2> error.log 1> dump.sql , und lesen Sie das Fehlerprotokoll separat wie in der vorherigen Lösung.
  3. Lösung von JazZ : schreibe den Dump als Subshell und leite stderr von der Subshell nach stdout um, der php exec() einfügen kann Die Variable $output .
  4. Lösung von Pascal : besser proc_open() anstelle von exec() verwenden, da wir stdout und stderr bekommen können separat (direkt aus Rohren).
dmnc 04.02.2017 12:56
quelle
0

Schreiben Sie den folgenden Code, um den Datenbank-Export in eine .sql-Datei zu erhalten.

%Vor%     
Avinash Raut 28.07.2017 19:48
quelle

Tags und Links