Hannes1234: Mit PHP externes Programm (cmd.exe) steuern

Hi,

per PHP Script sollen Befehle an die cmd.exe gesendet werden. Das ganze passiert auf einem Windows2000 System.

Mit

<?
passthru('cd c:\programme\fop');
passthru('fop -xml 1.xml -xsl template1.xslt -pdf outname.pdf');
?>
// cd -> öffnet ordner
// fop -> führt befehl zum erzeugen der pdf datei aus.

erreiche ich nichts, nur das die cmd.exe sich kurz öffnet und wieder schließt. Könnt ihr mir helfen?

Grüße Hannes

  1. Hallo Hannes1234!

    per PHP Script sollen Befehle an die cmd.exe gesendet werden. Das ganze passiert auf einem Windows2000 System.

    ...

    erreiche ich nichts, nur das die cmd.exe sich kurz öffnet und wieder schließt. Könnt ihr mir helfen?

    Du könnest alle Befehle in eine .cmd Datei schreiben und am ende pause.
    Wenn du die datei mit php startest bleibt die DosBox offen und du siehst ob es Fehlermeldungen (zB wegen fehlender Berechtigungen) gibt.

    Viele Grüße

    H-P Ortner

    1. Du könnest alle Befehle in eine .cmd Datei schreiben und am ende pause.
      Wenn du die datei mit php startest bleibt die DosBox offen und du siehst ob es Fehlermeldungen (zB wegen fehlender Berechtigungen) gibt.

      Viele Grüße

      H-P Ortner

      Hallo H-P Ortner,

      danke für die Antwort. Leider bringt sie mich nicht sonderlich weiter. Wenn ich auf dem PC die Befehle (die auch in PHP verwendet werden) ausführe, klappt ja alles wunderbar... das diente zum Test. Nun soll es von PHP gesteuert bzw. ausgeführt werden und da scheint es zu hacken...

      Grüße Hannes1234

      1. Hallo Hannes1234!

        danke für die Antwort. Leider bringt sie mich nicht sonderlich weiter.
        Wenn ich auf dem PC die Befehle (die auch in PHP verwendet werden) ausführe, klappt ja alles wunderbar... das diente zum Test. Nun soll es von PHP gesteuert bzw. ausgeführt werden und da scheint es zu hacken...

        Ich hab dir vorgeschlagen die .cmd Datei mit PHP zu starten, damit du diese DosBox, die bereits aus der Umgebung von PHP läuft, siehst. Kommt da eine Fehlermeldung, bricht es vor der pause ab, was passiert?

        Viele Grüße

        H-P Ortner

        1. Ich hab dir vorgeschlagen die .cmd Datei mit PHP zu starten, damit du diese DosBox, die bereits aus der Umgebung von PHP läuft, siehst. Kommt da eine Fehlermeldung, bricht es vor der pause ab, was passiert?

          Viele Grüße

          H-P Ortner

          Ich weiß was du meinst, jedoch fehlt mir die Umsetzung in PHP? Kannst du mir die Befehle sagen? Beispiel...

          Danke

          1. Hallo.

            Ich weiß was du meinst, jedoch fehlt mir die Umsetzung in PHP? Kannst du mir die Befehle sagen?

            Der Befehl lautet: Lies!
            MfG, at

  2. Hi,

    ich mag mich täusch, aber ich glaube dem Webserver wird es relativ egal sein, dass du da zwei passthrough Befehle nacheinander stehen hast. Er wird stattdessen:

    1. Befehl starten, Verzeichnis wechseln, Befehl Ende, alles vergessen
    2. Befehl starten, fop aufrufen, nicht gefunden weil falsches Verzeichnis, Befehl Ende, alles vergessen.

    MfG
    Rouven

    --
    -------------------
    When the only tool you've got is a hammer, all problems start to look like nails.
    1. Hi,

      ich mag mich täusch, aber ich glaube dem Webserver wird es relativ egal sein, dass du da zwei passthrough Befehle nacheinander stehen hast. Er wird stattdessen:

      1. Befehl starten, Verzeichnis wechseln, Befehl Ende, alles vergessen
      2. Befehl starten, fop aufrufen, nicht gefunden weil falsches Verzeichnis, Befehl Ende, alles vergessen.

      MfG
      Rouven

      »»

      Hi Rouven,

      Wie kann ich diesen Befehl dann kombinieren??

      1. Hello,

        Wie kann ich diesen Befehl dann kombinieren??

        ich nehme an der einzige Grund für die Kombination ist der Wechsel des Verzeichnisses, oder? Die einfachste Variante - sofern du Zugriff auf die Umgebungsvariablen des Servers hast - wäre eine entsprechende Umgebungsvariable zu manipulieren: PATH.
        Nachdem diese auch das Verzeichnis des PDF-Konverters enthält kann man diesen von überall aufrufen ohne vorher in das entsprechende Verzeichnis zu wechseln.
        Die andere Alternative wäre die von Marc vorgeschlagene: Eine Batch-Datei in der sowohl der CD als auch der Aufruf-Befehl drinstehen; diese müsste allerdings um gefunden zu werden dort liegen, wo das Skript ausgeführt wird*.

        MfG
        Rouven

        * schwer zu sagen, welches Verzeichnis das zur Laufzeit ist, KÖNNTE das Verzeichnis der .php-Datei sein.

        --
        -------------------
        When the only tool you've got is a hammer, all problems start to look like nails.
        1. Die andere Alternative wäre die von Marc vorgeschlagene: Eine Batch-Datei in der sowohl der CD als auch der Aufruf-Befehl drinstehen; diese müsste allerdings um gefunden zu werden dort liegen, wo das Skript ausgeführt wird*.

          MfG
          Rouven

          * schwer zu sagen, welches Verzeichnis das zur Laufzeit ist, KÖNNTE das Verzeichnis der .php-Datei sein.

          Das klappt wunderbar! Jetzt bliebe noch die schwierigkeit Variablen in die Batch Datei mitzugeben?

          Danke für eure Hilfe!!

          1. Hi,

            Das klappt wunderbar! Jetzt bliebe noch die schwierigkeit Variablen in die Batch Datei mitzugeben?

            das ist keines: http://www.robvanderwoude.com/parameters.html.

            MfG
            Rouven

            --
            -------------------
            Death is nature's way of telling you to slow down.
            1. Hi,

              Das klappt wunderbar! Jetzt bliebe noch die schwierigkeit Variablen in die Batch Datei mitzugeben?
              das ist keines: http://www.robvanderwoude.com/parameters.html.

              MfG
              Rouven

              Danke für deine Hilfe!

              Soweit bin ich auch schon gekommen...
              meine bat sieht nun so aus:

              ///////do.bat//////////
              @ECHO OFF

              set var= [daten von php übergeben??]

              cd c:\programme\fop
              fop -xml 1.xml -xsl template1.xslt -pdf %var%.pdf

              cd c:\programme\imagemagick
              convert %var%.pdf %var%.jpg
              ///////end//////////

              aber wie kann ich die variable vom php in die bat datei mitgeben?

              ///////script.php//////////
              <?
              exec('do.bat');
              ?>
              ///////end//////////

              Ein weiteres Problem tritt auf. der erste Vorgang (fop) wird durchgeführt, der 2. (convert) jedoch nicht. wenn ich sie extra getrennt ausführe funktionieren beide?!

              Grüße Hannes

              1. Hi,

                ich nehme an die Übergabe der Parameter müsste einfach über den String erfolgen:
                exec('do.bat param1');
                -> Beachte, dass du "param1" schreiben musst, falls der Wert Leerzeichen enthält.

                Ein weiteres Problem tritt auf. der erste Vorgang (fop) wird durchgeführt, der 2. (convert) jedoch nicht. wenn ich sie extra getrennt ausführe funktionieren beide?!

                Für die .bat mal auf der Kommandozeile von Hand aus, dann müsstest du eine Fehlermeldung sehen können sofern vorhanden.

                MfG
                Rouven

                --
                -------------------
                Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
              2. set var= [daten von php übergeben??]

                set var=%1

                fop -xml 1.xml -xsl template1.xslt -pdf %var%.pdf

                ist das eine .bat Datei? wenn ja:

                call fop -xml 1.xml -xsl template1.xslt -pdf %var%.pdf

                exec('do.bat');

                Dazu wurde schon was gesagt.

                Ein weiteres Problem tritt auf. der erste Vorgang (fop) wird durchgeführt, der 2. (convert) jedoch nicht. wenn ich sie extra getrennt ausführe funktionieren beide?!

                Wahrscheinlich weil fop eine .bat-Datei ist. Guck mal nach ;)

                Gruß, Bodo

  3. Hallo Hannes,

    Über eine einfache BAT-Datei könntest du dein Vorhaben wesentlich schneller erreichen. Diese rufst du dann ganz simpel via PHP auf.
    Und wie schon beschrieben wurde: Wenn du eine weitere Zeile einfügst mit "pause", so kannst du die Fehlermeldungen ansehen. Natürlich nur für Debugging-Zwecke.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Hallo Hannes,

      Über eine einfache BAT-Datei könntest du dein Vorhaben wesentlich schneller erreichen. Diese rufst du dann ganz simpel via PHP auf.
      Und wie schon beschrieben wurde: Wenn du eine weitere Zeile einfügst mit "pause", so kannst du die Fehlermeldungen ansehen. Natürlich nur für Debugging-Zwecke.

      Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      Hallo,

      wie würde denn dann die Bat Datei aussehen und wie kann ich diese in PHP starten? Damit kenn ich mich leider nicht so aus.

      Grüße