Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Leerzeichen in Pfad

Frage Entwicklung PHP

Mitglied: infowars

infowars (Level 2) - Jetzt verbinden

03.10.2012, aktualisiert 04.10.2012, 12063 Aufrufe, 4 Kommentare

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

01.
<?php 
02.
exec("start C:\\Windows\\notepad.exe"); 
03.
?>
startet Notepad.

Jetzt möchte ich ein anderes Progam öffnen:
01.
<?php 
02.
exec("start U:\\Program Files (x86)\\Pfad\\anwendung.exe"); 
03.
?>
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 ?

Mit freundlichen Grüßen
Mitglied: Arano
03.10.2012 um 17:27 Uhr
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


Viel Erfolg
~Arano
Bitte warten ..
Mitglied: infowars
03.10.2012, aktualisiert um 17:59 Uhr
Danke für die Antwort, habs jetzt auch soweit das eine .bat gestartet wird, aber das Programm startet dafür noch nicht:
01.
<?php 
02.
exec("start C:\\bat.bat>NUL"); 
03.
?>
Inhalt der .bat:
01.
"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:
01.
<?php 
02.
exec(start "U:\\Program Files (x86)\\Pfad\\anwendung.exe -parameter parameter.file"); 
03.
?>
oder so:
01.
<?php 
02.
exec("start "U:\\Program Files (x86)\\Pfad\\anwendung.exe" -parameter parameter.file"); 
03.
?>
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...
Bitte warten ..
Mitglied: Arano
03.10.2012 um 18:09 Uhr
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


~Arano
Bitte warten ..
Mitglied: infowars
03.10.2012, aktualisiert 04.10.2012
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.
01.
<?php 
02.
exec('start "U:\\Program Files (x86)\\Pfad\\anwendung.exe -parameter.file'); 
03.
?>
EDIT: Dann sollte das doch auch funktionieren, tut es aber nicht:
01.
<?php 
02.
exec('start "U:\\Program Files (x86)\\Pfad\\bat.bat"'); 
03.
?>
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Leerzeichen im Pfad (4)

Frage von Jallio zum Thema Batch & Shell ...

Microsoft Office
gelöst Dropdownlisten in Abhängigkeit mit Leerzeichen im Namen (Datenüberprüfung) (2)

Frage von kevische zum Thema Microsoft Office ...

Windows Userverwaltung
Servergespeichertes Profil - Pfad ausfindig machen (6)

Frage von staybb zum Thema Windows Userverwaltung ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...

Server-Hardware
Lenovo Server System X 3650 M5 Festplatten (9)

Frage von Hendrik2586 zum Thema Server-Hardware ...