2009-06-16 5 views
3

Ich möchte einen Dateipfad als Parameter an eine ausführbare Datei von PHP übergeben, und der Dateipfad darf Leerzeichen enthalten. Die ausführbare Datei scheint keine Anführungszeichen um den Parameter herum zu verarbeiten, also dachte ich, ich könnte vielleicht den kurzen DOS-Namen anstelle des langen Namens übergeben.Kann ich den kurzen DOS-Namen einer Datei von PHP bekommen?

Kennt PHP etwas über die alten DOS 8.3-Dateinamen?

Antwort

4

php/win32 Schiffe mit der COM/.net extension built-in verwenden. Sie können damit eine WSH FileSystemObject erstellen und dann die ShortPath property der File object abfragen.

<?php 
$objFSO = new COM("Scripting.FileSystemObject"); 
$objFile = $objFSO->GetFile(FILE); 
echo "path: ", $objFile->Path, "\nshort path: ", $objFile->ShortPath;
Drucke z.B.
path: C:\Dokumente und Einstellungen\Volker\Desktop\test.php 
short path: C:\DOKUME~1\Volker\Desktop\test.php

0

Wie wäre es Backslashing der Raum?

Home/My Documents/ --> Home/My\ Documents/ 
+0

Die ausführbare Datei, die ich ausführen möchte, behandelt den Backslash als Teil des Namens. In Ihrem Beispiel würde es versuchen, die Datei Home/My \ –

+0

zu öffnen. Sie möchten wahrscheinlich wie von phphil vorgeschlagen escapeshellarg. Sie würden mit einem umgekehrten Schrägstrich entkommen, wenn ich direkt von der Befehlszeile –

1

Sie können sich die escapeshellarg() ansehen und den Parameter in doppelte Anführungszeichen setzen.

+0

anrief dachte ich, das sollte auch funktionieren. Es funktioniert, wenn ich den Befehl dir ausführen, aber nicht, wenn ich den Befehl ausführe, den ich ausführen möchte. –

+0

Verwenden Sie escapeshellcmd(), um die ausführbare Datei zu entkommen, und escapeshellarg() für die Argumente. –

+0

Danke für den Vorschlag, aber ich verstehe nicht, escapeshellcmd überhaupt. Unter Windows scheint es nur, Sonderzeichen durch Leerzeichen zu ersetzen. 'C: \ Dokumente und Einstellungen \ don \ foo' wird zu 'C: Dokumente und Einstellungen don foo'. Wie ist das nützlich? –

1

Sie möchten die GetShortPathName API in Kernel32 unter Windows. Um dies von PHP aus aufzurufen, müssen Sie die Win32 API extension ...

+0

Das wäre wahrscheinlich schneller. Leider kann ich es nicht testen, da der Build php 5.3rc2 ohne das w32-Modul kam: -/Ich hoffe, es macht mir nichts aus, wenn ich die Links zu Ihrem Post hinzufüge. – VolkerK

Verwandte Themen