kann noch jemand DOS oder mysqldump mit Schoenheitsfehlern?
Dieter Raber
- php
Hallo,
Nach Andreas' Hinweis in [pref:t=38626&m=211596] benutze ich jetzt mysqldump zum dumpen von Tabellen mit PHP unter Windows XP. Wenn ich die Dumps (ich habe Gruende, die Tabellen getrennt zu sichern) nacheinander mit PHP abarbeite, blitzt das Command-Fenster zweimal auf und fertig. Es waere mir lieber, es wuerde das mit dem Aufblitzen lassen. Eine Idee war, ein Batch-File aufzurufen, dann gibst's nur einen 'Blitz', das funktioniert auch. Das Dumme ist, der Batch-Befehl wird auf der Webseite anschliessend als Text ausgegeben, auch nicht so gut. - Hat jemand noch kreative Vorschlaege - meine Batch-Kenntnisse sind allerdings eher begrenzt?
Dieter
Halihallo Dieter
Nach Andreas' Hinweis in [pref:t=38626&m=211596] benutze ich jetzt mysqldump zum dumpen von Tabellen mit PHP unter Windows XP. Wenn ich die Dumps (ich habe Gruende, die Tabellen getrennt zu sichern) nacheinander mit PHP abarbeite, blitzt das Command-Fenster zweimal auf und fertig. Es waere mir lieber, es wuerde das mit dem Aufblitzen lassen.
Wie startest du das Script?
Eine Idee war, ein Batch-File aufzurufen, dann gibst's nur einen 'Blitz', das funktioniert auch. Das Dumme ist, der Batch-Befehl wird auf der Webseite anschliessend als Text ausgegeben, auch nicht so gut. - Hat jemand noch kreative Vorschlaege - meine Batch-Kenntnisse sind allerdings eher begrenzt?
Hä, was, wie, wo? - Batch-Befehl auf Website ausgeben? - Startest du die Batch über'n
Webserver?
Ausgabe kann man mit vorangehendem @ unterbinden. Für globales abschalten dient
@echo off
eg.
@echo off
dir
rem - in diesem Beispiel wird gar nix mehr ausgegeben, ausser dem Output vom Befehl
rem - dir, aber eben: Keine Befehle mehr.
Viele Grüsse
Philipp
Hi Philipp,
wir hatten ja gestern schon das Vergnuegen und du wirst dich an meine Unterhaltung mit Andreas wegen des Dumps erinnern. Wie Du weisst, gibt es bei meiner Anwendung zwei Teile, naemlich einen auf einem lokalen Rechner und einem im Web. Das hier bezieht sich natuerlich auf den lokalen, wo ich am Rechner so ziemlich machen kann, was ich will.
Mein PHP-File sieht etwa so aus:
<?php
// hier jede menge variablen
system("dump.bat $dbuser $dbpass $dbhost $dbname $all $web");
?>
Die Batch Datei (mysqldump habe ich in die PATH Variable eingetragen)
@echo off
mysqldump --add-drop-table -q -u%1 -p%2 -h%3 %4 objekte attribute > %5
mysqldump --add-drop-table -q -u%1 -p%2 -h%3 %4 web > %6
@echo off
exit
Ich hab das echo off nach Deinem vorigen Posting eingebaut und das funktioniert auch gut so, eines von den beiden koennte ich wohl einsparen.
Wenn Du mir jetzt noch beibringen kannst, wie ich verhindere, dass ueberhaupt ein Fenster von CMD aufgeht, waere ich restlos zufrieden fuer heute ;-)
Dieter
Halihallo Dieter
Die Batch Datei (mysqldump habe ich in die PATH Variable eingetragen)
Nicht mysqldump musst du eintragen, sondern das Verzeichnis; wirst du aber wohl richtig
eingetragen haben, da es sonst nicht funktionieren würde...
@echo off
mysqldump --add-drop-table -q -u%1 -p%2 -h%3 %4 objekte attribute > %5
mysqldump --add-drop-table -q -u%1 -p%2 -h%3 %4 web > %6
@echo off
exit
das zweite @echo off ist redundant (der echo ist ja bereits auf off) und exit ist
ebenfalls implizit (letzte Zeile => automatisches Ende).
Wenn Du mir jetzt noch beibringen kannst, wie ich verhindere, dass ueberhaupt ein Fenster von CMD aufgeht, waere ich restlos zufrieden fuer heute ;-)
Komisch, dass der Aufruf von system ein Eingabefenster öffnet... Wird wirklich eine
Eingabeaufforderung geöffnet, wenn du system( 'mysqldump ...' ) ausführst? - Sollte
meiner Meinung nach im selben Prozess ausgeführt werden...
Leider kenne ich mich hier mit PHP etwas zu wenig aus. In Perl könntest du auf die
Win32-Module zurückgreifen und einen hidden-Prozess starten, ginge ganz einfach.
In PHP gibt's natürlich die Möglichkeit über OLE auf Systemkomponenten zuzugreifen,
mit Hilfe dieser kannst du einen "versteckten"-Prozess starten und dort deine Batch
ausführen. Leider kenne ich die Kommandos nicht auswendig.
Andere Möglichkeiten:
shell_exec
exec
popen
versuch die Mal durch und informiere dich über www.php.net; evtl. kannst du versuchen,
den Output ins nirvana zu senden >NUL, wobei dies wohl kaum dazu führt, die
Eingabeaufforderung nicht aufzurufen.
Was anderes fällt mir z. Z. nicht ein.
Viele Grüsse
Philipp