Dieter Raber: kann noch jemand DOS oder mysqldump mit Schoenheitsfehlern?

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

  1. 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

    1. 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

      1. 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