我想將文件路徑作爲參數傳遞給PHP中的可執行文件,並且文件路徑可能包含空格。可執行文件似乎無法處理引用參數,所以我想也許我可以傳遞短的DOS名稱而不是長名稱。我可以從PHP獲取文件的簡短DOS名稱嗎?
PHP知道關於舊式DOS 8.3文件名的任何內容嗎?
我想將文件路徑作爲參數傳遞給PHP中的可執行文件,並且文件路徑可能包含空格。可執行文件似乎無法處理引用參數,所以我想也許我可以傳遞短的DOS名稱而不是長名稱。我可以從PHP獲取文件的簡短DOS名稱嗎?
PHP知道關於舊式DOS 8.3文件名的任何內容嗎?
php/win32隨附COM/.net extension built-in。您可以使用它創建WSH FileSystemObject,然後查詢File object的ShortPath property。
<?php
$objFSO = new COM("Scripting.FileSystemObject");
$objFile = $objFSO->GetFile(FILE);
echo "path: ", $objFile->Path, "\nshort path: ", $objFile->ShortPath;
打印例如
path: C:\Dokumente und Einstellungen\Volker\Desktop\test.php short path: C:\DOKUME~1\Volker\Desktop\test.php
如何對空間進行反斜線?
Home/My Documents/ --> Home/My\ Documents/
您可能想看看escapeshellarg()
並將參數放在雙引號之間。
,我認爲它也可以工作,您可以用反斜槓進行轉義。它在我執行dir命令時起作用,但在執行我試圖運行的命令時不起作用。 – 2009-06-16 23:23:23
你需要在Windows上的Kernel32中的GetShortPathName API。要從PHP調用此函數,您需要使用Win32 API extension ...
我試圖運行的可執行文件將反斜槓視爲名稱的一部分。在你的例子中,它會嘗試打開文件Home/My \ – 2009-06-16 22:42:01
您可能需要phphil建議的escapeshellarg。如果直接從命令行調用 – 2009-06-16 22:56:18