PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Windows system() Script Problem



nachtengel06
24-09-2007, 11:57
Hallo zusammen,

bin schon voll am verzweifeln, hab gar nichts bei google gefunden und weis jetzt auch jetzt auch einfach nicht mehr weiter...

Ich möchte gerne auf einem Windows Server ein BackUP einer MYSQL DB manuell starten:



<?php
error_reporting(E_ALL);

$dbusr = "xxxxxx";
$dbpwd = "xxxxxxxxxx";
$dbhost = "localhost";
$db = "dbxxx";
$dbMySQLdump = "C:/Programme/MySQL/MySQL Server 5.0/bin/mysqldump.exe";
$dbsavepath = "X:/xxxxxxxxx/xxxxx/xxxxx";

$usrname = "testuser";
$date = date("d-m-y-H-i");

// Datenbank Export
system("$dbMySQLdump -u$dbusr -p$dbpwd -h $dbhost $db | gzip > $dbsavepath/$db-$usrname-$date.sql.gz", $return);

if($return == 0) { print " Datenbank wurde <b>erfolgreich</b> exportiert! "; }
else { print " Datenbankexport <b>fehlgeschlagen</b>! "; }

?>


Habe aber das Problem das kein Backup erstellt wird. Es wird auch keine Fehlermeldung ausgegeben. Weis auch nicht womit das zusammenhängen könnte.

Hat jemand eine Idee? Würde mich echt freuen wenn mir wer helfen könne!

Turbohummel
24-09-2007, 15:30
Könnte am leerzeichen im Pfad liegen. Ich kann mich erinnern damit auch mal probleme gehabt zu haben. Offensichlich will windows hier den Pfad in Anführungszeichen. Grundsätzlich würde ich auf die Leerzeichen verzichten.
Weiterhin würde ich sicherstellen, dass der Savepath existiert.

BLUESCREEN3D
24-09-2007, 18:29
In $return steht vermutlich nur der Rückgabewert von gzip und nicht von mysqldump.

Hast du Mal versucht, genau den Befehl, den das PHP-Script zusammenbaut, manuell aufzurufen?

nachtengel06
25-09-2007, 07:12
Danke erstmal für eure Hilfe!!

@BLUESCREEN3D
$return ist der Rückgabe wert für die Ausführung, also ob diese Erfolgreich war oder nicht. Den Befehl der zusammengestetzt wird von mir hab ich mir schon angesehen er sieht völlig okay aus.

(Hier mal der Befehl ausgegebene Befehl! (wichtige Daten ersetzt mit xxxxxx))

C:\Programme\MySQL\bin\mysqldump.exe -uroot -pxxxxxxxx -h localhost DBxxx | gzip > X:\xxxx\xxxxx\xxxxx\dbsave\db-Datum-username.gz


@Turbohummel
Hab den Pfad geändert (siehe oben), aber immernoch ohne Erfolg.

Offensichlich will windows hier den Pfad in Anführungszeichen.
Wie meinst du das in Anführungszeichen kannst du mir das als Bsp. geben?

Frage für mich ist noch wie rum die Slashes müssen, habe die beiden Pfade bereits mit file_exists geprüft ob sie existieren - ohne Probleme egal wie rum die Slashes waren.... Nur ist es vielleicht für die Funktion nicht egal ?!!?!

Der Sicherungspfad existiert (- geprüft).

mit dem oben stehenden "Befehl" bekomme ich jetzt eine .gz Datei ausgegeben aber leider null Byte! Wenn ich mir $return ausgeben lasse bekomme ich eine 255 zurück, kann aber leider diesen "Fehlercode" nicht für mich sinnvoll nachvollziehen, finde leider auch bei php.net nichts.
Wenn $return = 0 wird eine ausgabe erstellt.

Turbohummel
25-09-2007, 13:46
Ich hab das Script mal bei mir getestet - gleiches Ergebnis. Kommt mir auch komisch vor.

BLUESCREEN3D
25-09-2007, 15:29
$return ist der Rückgabe wert für die Ausführung, also ob diese Erfolgreich war oder nicht.
(...)
Wenn ich mir $return ausgeben lasse bekomme ich eine 255 zurück
Ne, das ist der Rückgabewert des ausgeführten Befehls.
Aber gzip sollte kein 255 zurückgeben, sondern laut Manpage 0, 1 oder 2.

Du könntest mal den Rückgabewert der Funktion system() überprüfen:

if (system(...) === false)
{
echo "error"
}