0

我有一个基于 Windows 上的 PHP 和 xampp 服务器的 Intranet 项目。该 Intranet 项目有一个带有表的数据库,我在其中存储文件和文件夹的扫描磁盘驱动器信息。我使用简单的 windows 命令dir "$directory_path" /Q /T:C来获取信息。

之后,我使用正则表达式匹配并解析该信息以分隔日期、时间、权限和目录名称,如下例所示:

用于目录解析的示例正则表达式

类似于这个例子:Get file owner in Windows using PHP

这工作正常,但有时文件所有者名称很长并且被命令行剥离。在这种情况下,我无法阅读全名并且功能已损坏。

现在我正在寻找另一种解决方案。

我的 PHP 还安装了php_com_dotnet.dll扩展,并且我COM()在代码的某些部分中使用了类。

我的主要问题是:

-我可以使用COM()类来获取真实的文件信息并避免文件搜索和列表的shell命令以及如何?

- 是否有其他扩展、shell 命令或第三个我可以用来获取文件/文件夹所有者的东西?

注意:我只需要在数据库中读取和索引,不需要更改权限或所有权。

4

1 回答 1

2

我使用 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 函数仅适用于 Windows 版本的 PHP。

.Net 支持需要 PHP 5 和 .Net 运行时。

自 PHP 5.3.15 / 5.4.5 起,此扩展需要在 php.ini 中启用php_com_dotnet.dll 才能使用这些功能。以前的 PHP 版本默认启用这些扩展。

您负责安装对各种 COM 对象的支持

于 2019-06-05T10:24:26.953 回答