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.:
startet Notepad.
Jetzt möchte ich ein anderes Progam öffnen:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 192160
Url: https://administrator.de/contentid/192160
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Infowars
Warum den "umgehen" ? Wie wäre es denn mit __richtig machen__ ?
Das Leerzeichen gilt in der Commandozeile auch als Trennzeichen:
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
du Escapest das Leerzeichen
Joar, so sollte das Passen *g* Habe kein Windows, kann es also nicht überprüfen
Viel Erfolg
~Arano
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) oderdu 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
Viel Erfolg
~Arano
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 !
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:
oder und das ist sogar etwas performanter die "doppelten PHP-Anführungszeichen" durch einfache ersetzen.
Mit doppelten Anführungszeichen eingeschlossene Strings werde noch nach Variablen durchsucht die dann ersetzt werden, einfache nicht
~Arano
denn nun sind die Anführungszeichen aus der Sicht von PHP unverständlich !
Du musst hier natürlich beides berücksichtigen !
- Muss die gesamte Syntax für PHP korrekt sein.
- muss das was du an das System weitergibst für das System korrekt sein und dann noch
- 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
~Arano