Kerstin: Programmaufruf mit exec unter Win und Linux

Hallo liebe Leute,

ich nutze die exec()-Funktion von PHP um eine Programm auszuführen. Klappt auch ganz gut - unter Windows. Windows verlangt die Angabe von Backslashes () - auf der Konsole jedenfalls - in Pfadangaben. Dies habe ich nun auch beim Programmaufruf über exec() beherzigt.
Linux jedoch bevorzugt die Angabe von Slashes (/) in einer Pfadangabe. Die Frage ist nun, wie löse ich das Problem, damit der Aufruf egal auf welcher Maschine korrekt ausgeführt wird? Oder stört das PHP nicht weiter?

THX,
Gruß,
Kerstin

  1. wie löse ich das Problem, damit der Aufruf egal auf welcher Maschine korrekt ausgeführt wird?

    Mit DIRECTORY_SEPARATOR

    Oder stört das PHP nicht weiter?

    Das stört sogar massiv. Dürfte die Funktion deines Scripts völlig unterbinden, wenn du Pech hast.

    1. Mit DIRECTORY_SEPARATOR

      Ha, genau das wars. Man muss ihn natürlich auch richtig schreiben. Also ich jetzt. Dann funzt es auch.

      Danke dir.

      Gruß,
      Kerstin

  2. Hallo Kerstin.

    Windows verlangt die Angabe von Backslashes () - auf der Konsole jedenfalls - in Pfadangaben.

    Hm, ich weiß nicht ab welcher Version, aber Windows kann ebenso gut mit dem normalen Slash als Separator umgehen.

    Einen schönen Dienstag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. Hallo Ashura,

      danke für deine Antwort. Habs gleich mal ausprobiert.

      Hm, ich weiß nicht ab welcher Version, aber Windows kann ebenso gut mit dem normalen Slash als Separator umgehen.

      Muss allerdings sagen, das hat nicht ganz geklappt. Was ich aufrufen möchte, sieht so aus:

      xfc/xslutil -v docbookhtml/manual-test.html docbook/manual-1-1.xml docbookxslt/mydocbookhtml.xsl

      Mit dem hinteren Teil, hat die Konsole kein Problem. Allerdings liegt das Prog (xslutil), welches ich aufrufen möchte in einem tieferen Verzeichnis (xfc). Deshalb ist die Angabe xfc/xslutil nötig. Allerdings kommt dann die Fehlermeldung, er würde den Befehl xfc nicht kennen. mit xfc\xslutil klappts dann allerdings unter Win.

      Hm ...

      Gruß und ebenfalls einen schönen Dienstag.
      Kerstin

      1. Hallo Kerstin,

        Hm, ich weiß nicht ab welcher Version, aber Windows kann ebenso gut mit dem normalen Slash als Separator umgehen.

        ich weiß auch nicht, ab welcher Version (Windows 98 sträubt sich jedenfalls noch), aber das mit dem "umgehen" ist leider nicht generell gegeben.
        Ein paar Beispiele an der Konsole meines Win2k:

        C:>cd windows/fonts
        C:\Windows>_

        C:>cd "windows/fonts"
        C:\Windows\Fonts>_

        C:>notepad windows/win.ini
        [notepad startet mit C:\Windows\win.ini]

        C:>tools/editor/pfe32.exe
        'dos' is not recognized as an internal or external command,
        operable program or batch file.
        C:>_

        C:>"tools/editor/pfe32.exe"
        [Editor pfe32.exe startet]

        Ich kann meine Erfahrungen also zusammenfassen:

        * Der normale Slash '/' wird als Verzeichnistrenner verstanden, wenn die
           Pfadangabe komplett in Anführungszeichen steht
         * Er wird auch teilweise ohne Anführungszeichen verstanden, wenn der Pfad
           von einer Anwendung interpretiert wird, die das kann
         * Er wird nicht verstanden, wenn er im Pfad der auszuführenden Datei
           vorkommt. Denn hier wird der Slash '/' üblicherweise als Präfix für
           Schalter verwendet (wie z.B. in dir /p).

        xfc/xslutil -v docbookhtml/manual-test.html docbook/manual-1-1.xml docbookxslt/mydocbookhtml.xsl

        Ah, dann versucht Windows also die Datei xfc.exe, xfc.com, xfc.cmd oder xfc.bat (in dieser Reihenfolge) aufzurufen - das scheitert, weil keine derartige Datei existiert. Würde sie existieren, bekäme sie die gesamte restliche Kommandozeile "/xslutil -v docbookhtml/manual-test.html ..." als Argument übergeben.

        Mit dem hinteren Teil, hat die Konsole kein Problem. Allerdings liegt das Prog (xslutil), welches ich aufrufen möchte in einem tieferen Verzeichnis (xfc). Deshalb ist die Angabe xfc/xslutil nötig. Allerdings kommt dann die Fehlermeldung, er würde den Befehl xfc nicht kennen. mit xfc\xslutil klappts dann allerdings unter Win.

        Was würde Linux meinen, wenn du "xfc/xslutil" in Anführungszeichen setzt? Falls das funktioniert, wäre das eine Notation, die beide Systeme kapieren.

        Schönen Abend noch,
         Martin

        --
        Du kannst dem Leben nicht mehr Tage geben.
        Aber dem Tag mehr Leben.
        1. Hallo Martin.

          Was würde Linux meinen, wenn du "xfc/xslutil" in Anführungszeichen setzt? Falls das funktioniert, wäre das eine Notation, die beide Systeme kapieren.

          Eben getestet: wird akzeptiert; die jeweilige Datei wird ausgeführt.

          Einen schönen Dienstag noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
        2. gudn tach!

          * Der normale Slash '/' wird als Verzeichnistrenner verstanden, wenn die
             Pfadangabe komplett in Anführungszeichen steht

          vorsicht aber bei folgendem, was unter linux kein syntaxfehler waere:

          C:>cd usr
          C:\usr>

          C:>cd /usr
          Syntaxfehler.

          C:>cd "/usr"
          Syntaxfehler.

          prost
          seth