Der Martin: system() Pfad mit Leerzeichen, maskieren

Beitrag lesen

Hallo,

ich möchte einen system() Befehl ausführen. Das klappt bei folgendem Pfad:
$last_line = system("C:\Programme\htdocs\helper\pdfinfo "$ordner/$file"", $retval);

okay, das riecht stark nach Windows. ;-)
Wobei mich überrascht, dass du die Endung .exe weglässt (darf man in vielen Fällen, ich setze aber gewöhnlich die Dateinamen vollständig ein). Ebenso wundert mich, dass du Backslashes und normale Vorwärts-Slashes gemischt verwendest.

Wenn das Verzeichnis jedoch Leerzeichen hat wie;
  $last_line = system("C:\Program Files\Common Files\pdfinfo "$ordner/$file"", $retval);
funktioniert es nicht mehr.

Richtig, dann wird Windows alles bis zum ersten Leerzeichen als Programmnamen interpretieren, und der Aufruf scheitert logischerweise. Btw, wie äußert sich "funktioniert nicht"? Gibt system() als Ergebnis false zurück? Wird der Kind-Prozess gestartet (Task-Manager beobachten)?

Ich habe schon alle möglichen Maskieren versucht:
  $last_line = system(""C:\Program Files\Common Files\pdfinfo" "$ordner/$file"", $retval);

Genau so will es Windows aber normalerweise haben: Pfadnamen, die Leerzeichen enthalten, müssen in Anführungszeichen gesetzt werden.

$last_line = system("""C:\Program Files\Common Files\pdfinfo"" "$ordner/$file"", $retval);

Doppelte Anführungszeichen? Huch ...

So long,
 Martin

--
Success should be measured not so much by the position that one has reached in life,
but by the obstacles one has overcome while trying to succeed.