2009-06-16 3 views
3

Я хочу передать путь к файлу в качестве параметра исполняемому файлу из PHP, а путь к файлу может содержать пробелы. Исполняемый файл, похоже, не обрабатывает кавычки вокруг параметра, поэтому я подумал, что, возможно, я могу передать короткое имя DOS вместо длинного имени.Могу ли я получить короткое имя DOS файла из PHP?

Знает ли PHP что-либо о именах файлов DOS 8.3 старого стиля?

ответ

4

php/win32 отправляется с COM/.net extension built-in. Вы можете использовать его для создания WSH FileSystemObject, а затем запросить ShortPath propertyFile object.

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

0

Как насчет обратного сбрасывания пространства?

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

Исполняемый файл, который я пытаюсь запустить, обрабатывает обратную косую черту как часть имени. В вашем примере он попытается открыть файл Home/My \ –

+0

Вы, вероятно, захотите escapeshellarg, как это предложил phphil. Вы могли бы сбежать с обратным слэшем, если вы вызываете прямо из командной строки –

1

Возможно, вы захотите взглянуть на escapeshellarg() и поместить параметр между двойными кавычками.

+0

Я думал, что это тоже должно работать. Он работает, когда я выполняю команду dir, но не тогда, когда я выполняю команду, которую я пытаюсь запустить. –

+0

используйте escapeshellcmd(), чтобы избежать выполнения исполняемого файла, и escapeshellarg() для аргументов. –

+0

Спасибо за предложение, но я вообще не понимаю escapeshellcmd. В Windows это просто заменяет специальные символы пробелами. 'C: \ Documents and Settings \ don \ foo' становится 'C: Documents and Settings don foo'. Как это полезно? –

1

Вы хотите использовать API GetShortPathName в Kernel32 на окнах. Чтобы называть это с PHP, вам нужно будет использовать Win32 API extension ...

+0

Скорее всего, это будет быстрее. К сожалению, я не могу проверить это, потому что сборка php 5.3rc2 появилась без модуля w32: - Надеюсь, вы не возражаете, если я добавлю ссылки на ваш пост. – VolkerK

Смежные вопросы