我想将文件路径作为参数传递给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