Чтение файла и владельца каталога с помощью PHP в Windows - PullRequest
0 голосов
/ 04 июня 2019

У меня есть проект интрасети, основанный на сервере PHP и xampp в Windows.В этом интранет-проекте есть база данных с таблицей, где я храню информацию о файлах и папках на отсканированных дисках.Я использовал простую команду Windows dir "$directory_path" /Q /T:C для получения информации.

После этого я использую регулярное выражение для сопоставления и анализа этой информации, чтобы отделить дату, время, разрешение и имя каталога, как в этом примере:

ПРИМЕР РЕГЕКСА ДЛЯ ПАРСИРОВАНИЯ КАТАЛОГА

Это похоже на этот пример: Получить владельца файла в Windows, используя PHP

Это работает нормально, но иногда имена владельцев файловдействительно длинные и были удалены из командной строки.В этом случае я не могу прочитать полное имя и функциональность нарушена.

Теперь я ищу другое решение.

Мой PHP также установил расширение php_com_dotnet.dll, и я использую класс COM()в некоторой части кода.

Мой главный вопрос:

-Могу ли я использовать COM() класс, чтобы получить реальную информацию о файле и избежать команд оболочки для поиска файлов и списков и как?

-Есть ли какое-то другое расширение, команда оболочки или что-то третье, что я могу использовать, чтобы получить владельцев файлов / папок?

ПРИМЕЧАНИЕ: мне это нужно только для чтения и индексации в базе данных, донне нужно менять права доступа или владельца.

1 Ответ

0 голосов
/ 05 июня 2019

Я нахожу простое решение для этого, используя класс PHP COM () и документацию метода IADsSecurityUtility :: GetSecurityDescriptor .

Код в PHP выглядит следующим образомэто:

$path = 'D:\Some File\Some Another File\document.doc'; // File or dir path
$su = new COM("ADsSecurityUtility"); // Call interface
$securityInfo = $su->GetSecurityDescriptor($path, 1, 1); // Call method
echo $securityInfo->owner; // Get file owner

Вот и все.

ПРИМЕЧАНИЕ

Функции COM доступны только для версии PHP для Windows.

.Net поддержка требует PHP 5 и .Net runtime.

Начиная с PHP 5.3.15 / 5.4.5, это расширение требует, чтобы php_com_dotnet.dll был включен внутриphp.ini для того, чтобы использовать эти функции.Предыдущие версии PHP включали эти расширения по умолчанию.

Вы несете ответственность за установку поддержки различных COM-объектов

...