Variable oder nicht Variable beim mysqldump = leere oder volle Datenbank???

wireless-dj

Mitglied
Moin,

Ich stehe vor einem Problem - das ist echt strange, und ich verstehe es beim besten Willen nicht.
Ich möchte einen mysqldump in PHP durchführen. Folgender Befehl dafür funktioniert:

Code:
$DB_HOST = "localhost:3306";
$DB_NAME = "Name-der-Datenbank";
$DB_BENUTZER = "Benutzername";
$DB_PASSWORT = "Passwort";
$DB_HOST_ONLY = "localhost";
$DB_PORT_ONLY = "3306";

$command='/usr/bin/mysqldump --host=' .$DB_HOST_ONLY .' --user=' .$DB_BENUTZER .' --port=' .$DB_PORT_ONLY .' --password=' .$DB_PASSWORT .' '.$DB_NAME.' > backup/backup-' . date("Y-m-d_H-i") . '.sql';
exec($command);

Ergebnis:

Ich bekomme ein Backup meiner Datenbank, so, wie ich es haben möchte, alles gut.
Oben in der Liste der Variablen stehen zum Testen die Werte direkt drin.

Wenn ich mir nun aber die Variablen für DB_HOST, DB_NAME, usw. aus einem Array hole, dann bekomme ich ein
Backup - aber diese Datei ist leer!!! 0 Byte. Also so:

Code:
$DB_HOST = "$connect_werte[0]";    // ( Variable lautet: localhost:3306 )
$DB_NAME = "$connect_werte[1]";     // ( Variable lautet: Name-der-Datenbank )
$DB_BENUTZER = "$connect_werte[2]";    // ( Variable lautet: Benutzername )
$DB_PASSWORT = "$connect_werte[3]";     // ( Variable lautet: Passwort )
$DB_HOST_ONLY = "$connect_werte[4]";    // ( Variable lautet: localhost )
$DB_PORT_ONLY = "$connect_werte[5]";    // ( Variable lautet: 3306 )

$command='/usr/bin/mysqldump --host=' .$DB_HOST_ONLY .' --user=' .$DB_BENUTZER .' --port=' .$DB_PORT_ONLY .' --password=' .$DB_PASSWORT .' '.$DB_NAME.' > backup/backup-' . date("Y-m-d_H-i") . '.sql';
exec($command);

Ergebnis:

Ich bekomme ein Backup meiner Datenbank - die Datei ist aber leer. 0 Byte.

In dem Array stehen exakt ( -zig mal geprüft !!! ) die selben Werte,
wie in den Variablen - auch im Array sind es Strings.

Ich verstehe es nicht.
Kann mir bitte Jemand helfen?

Danke!!!
 
Auf Anhieb erkenne ich den Fehler nicht aber möglicher Weise hilft es weiter, wenn Du dieses Array und das zusammengebaute Kommando mit var_dump ausgibst.
 
Dabei kommt heraus:

string(134) "/usr/bin/mysqldump --host=localhost --user=Benutzername --port=3306 --password=Passwort Name-der-Datenbank > backup/backup-2024-06-19_15-52.sql"

string(135) "/usr/bin/mysqldump --host=localhost --user=Benutzername --port=3306 --password=Passwort Name-der-Datenbank > backup/backup-2024-06-19_15-52.sql"

string(134) schreibt eine Datei mit 320 KB, string(135) schreibt eine Datei mit 0 Byte.
 
Die Längen unterscheiden sich um eins obwohl die Strings offenbar gleich sind. Passwörter enthalten ja häufig Sonderzeichen und ich könnte mir vorstellen, dass diese Probleme machen. Sind auch die originalen Passwörter in beiden Ausgaben identisch?
 
Ja, ist ein Sonderzeichen als Punkt (.) enthalten.
Aber in beiden Ausgaben identisch.

EDIT: Wenn das Passwort nicht stimmt, kommt auch eine Fehlermeldung.
Aber der command läuft in beiden Fällen ohne Fehler durch.
 
Zuletzt bearbeitet:
Irgend wo muss der Unterschied in der Stringlänge her kommen. Versuche mal, mögliche Fehler auch in die Ausgabe umzuleiten, so wie hier beschrieben:
How to retrieve PHP exec() error responses?
Also
$command='/usr/bin/mysqldump --host=' .$DB_HOST_ONLY .' --user=' .$DB_BENUTZER .' --port=' .$DB_PORT_ONLY .' --password=' .$DB_PASSWORT .' '.$DB_NAME.' > backup/output.txt 2>&1';
 
Zurück