infowars
Goto Top

Leerzeichen in Pfad

Hi und schönen Feiertag zusammen,
ich möchte ein Programm auf dem Webserver (Win7 mit XAMPP) starten und benutze dazu PHP, z.B.:

<?php
exec("start C:\\Windows\\notepad.exe");  
?>

startet Notepad.

Jetzt möchte ich ein anderes Progam öffnen:
<?php
exec("start U:\\Program Files (x86)\\Pfad\\anwendung.exe");  
?>

und bekomme die Meldung, dass U:\Program nicht gefunden wurde.
Anscheinend macht das Leerzeichen ein Problem.
Wenn ich versuche das ganze als .bat auszuführen bekomme ich einen 500 Fehler in der log und nichts geht.

Wie kann man das so umgehen das die Anwendung auf dem Webserver gestartet wird ?

MfG

Content-ID: 192160

Url: https://administrator.de/contentid/192160

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

Arano
Arano 03.10.2012 um 17:27:19 Uhr
Goto Top
Hallo Infowars

Warum den "umgehen" ? Wie wäre es denn mit __richtig machen__ ?

Das Leerzeichen gilt in der Commandozeile auch als Trennzeichen: >programmname parameter1 parameter2 param3
Das ist also ein ganz normales Verhalten von Windows (nicht von PHP - nicht in diesem Fall)
Gleichzeitig ist das aber auch der Grund auf allen Systemen, eigentliche keine Leerzeichen in Datei- und Verzeichnisnamen zu verwenden.

Ausführen kannst du das aber immer noch.
Entweder du setzt die Zeichenkette die Leerzeichen enthält in Anführungszeichen >programmname "ich bin ein parameter" (Dann weiß die Commandozeile das es als "eins" gilt) oder
du Escapest das Leerzeichen >programmname ich\ bin\ ein\ parameter (Das erste Leerzeichen ist noch ein Trennzeichen, alle weiteren sind Escapet und werden auch als Leerzeichen gewertet)

Joar, so sollte das Passen *g* Habe kein Windows, kann es also nicht überprüfen face-smile


Viel Erfolg
~Arano
infowars
infowars 03.10.2012 aktualisiert um 17:59:40 Uhr
Goto Top
Danke für die Antwort, habs jetzt auch soweit das eine .bat gestartet wird, aber das Programm startet dafür noch nicht:
<?php
exec("start C:\\bat.bat>NUL");  
?>

Inhalt der .bat:
"U:\Program Files (x86)\pfad\anwendung.exe" -parameter parameter.file  

Und wenn ich das ganze in Anführungsstriche setze kommt alles durcheinander, weil ich noch einen Parameter als -parameter mitgeben will:
<?php
exec(start "U:\\Program Files (x86)\\Pfad\\anwendung.exe -parameter parameter.file");  
?>
oder so:
<?php
exec("start "U:\\Program Files (x86)\\Pfad\\anwendung.exe" -parameter parameter.file");  
?>

EDIT: Da stimmt eh was nicht, denn wenn ich .bat in C: direkt aufrufe kommt nichts, rufe ich die .bat direkt im Verzeichnis in dem die Anwendung liegt auf, gehts...
Arano
Arano 03.10.2012 um 18:09:56 Uhr
Goto Top
Klar haut das jetzt nicht hin,
denn nun sind die Anführungszeichen aus der Sicht von PHP unverständlich !
Du musst hier natürlich beides berücksichtigen !
  1. Muss die gesamte Syntax für PHP korrekt sein.
  2. muss das was du an das System weitergibst für das System korrekt sein und dann noch
  3. Das was du an den Browser ausgibst, für eben diesen verständlich (Stichwort: Valides-HTML)

Bei deinem erstem Versuch, sucht PHP nach einer Konstanten Namens "start", den die Anführungszeichen sind falsch gesetzt.
Beim zweitem Versuch geht die ERSTE Zeichenkette von dem erstem Anführungszeichen bis zum zweitem: --"start "-- dann geht es ganz über Kopf weil auch sicht von PHP der Verkettungsoperator fehlt, Das "U" keine Gültige Konstante ist, der ":" keinen Sinn macht, ...

So könntest du also auch hier die Anführungszeichen Escapen:
exec("start \"U:\\Program Files (x86)\\Pfad\\anwendung.exe\" -parameter parameter.file");
oder und das ist sogar etwas performanter die "doppelten PHP-Anführungszeichen" durch einfache ersetzen.
exec('start "U:\\Program Files (x86)\\Pfad\\anwendung.exe" -parameter parameter.file');
Mit doppelten Anführungszeichen eingeschlossene Strings werde noch nach Variablen durchsucht die dann ersetzt werden, einfache nicht face-wink


~Arano
infowars
infowars 03.10.2012, aktualisiert am 04.10.2012 um 12:20:14 Uhr
Goto Top
Sorry, ich blicks halt nicht so.
Wenn ich jetzt das eintrage und dann via PHP aufrufe, startet eine commandbox aber die Anwendung startet nicht.
Ich kann dann aber die .bat manuell aufrufen und die Anwendung startet.
Wie kann ich das noch hinbekommen, das die Anwendung startet ?
Liegt das an dem 'start' ?
Sollte ich das ganze über cmd.exe laufen lassen ?
Ich mach dafür einen neuen Thread auf.
<?php
exec('start "U:\\Program Files (x86)\\Pfad\\anwendung.exe -parameter.file');  
?>

EDIT: Dann sollte das doch auch funktionieren, tut es aber nicht:
<?php
exec('start "U:\\Program Files (x86)\\Pfad\\bat.bat"');  
?>