Programmaufruf mit exec unter Win und Linux
Kerstin
- php
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
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.
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
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
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
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
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
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