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, 12677 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 ?

MfG
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 ..
Ähnliche Inhalte
C und C++
gelöst C++ andere EXE aufrufen, Probleme mit Leerzeichen im Pfad (14)

Frage von pablovic zum Thema C und C ...

Batch & Shell
Leerzeichen im Pfad (4)

Frage von Jallio zum Thema Batch & Shell ...

Batch & Shell
gelöst Schreiben eines Strings mit Leerzeichen in eine Datei (6)

Frage von c20082005 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(4)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Heiß diskutierte Inhalte
Exchange Server
Exchange 2016 Standard Server 2012 R2 Hetzner Mail (41)

Frage von Datsspeed zum Thema Exchange Server ...

Windows 7
gelöst Lokales Adminprofil defekt (25)

Frage von Yannosch zum Thema Windows 7 ...

LAN, WAN, Wireless
gelöst Statische Routen mit ISC-DHCP Server für Android Devices (20)

Frage von terminator zum Thema LAN, WAN, Wireless ...