在 Windows 上使用 PHP 读取文件和目录所有者

Reading file and directory owner using PHP on the Windows

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

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

EXAMPLE REGEX FOR DIRECTORY PARSING

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

这个工作正常,但有时文件所有者的名字很长,被命令行删除了。在那种情况下,我无法读取全名并且功能已损坏。

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

我的 PHP 也安装了 php_com_dotnet.dll 扩展,我在某些代码中使用了 COM() class。

我的主要问题是:

-我可以使用 COM() class 获取真实文件信息并避免使用 shell 命令进行文件搜索和列表吗?

-是否有其他扩展、shell 命令或第三种我可以用来获得 file/folder 所有者的东西?

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

我使用 PHP class COM() and the documentation of the IADsSecurityUtility::GetSecurityDescriptor method.

找到了简单的解决方案

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 functions are only available for the Windows version of PHP.

.Net support requires PHP 5 and the .Net runtime.

As of PHP 5.3.15 / 5.4.5, this extension requires php_com_dotnet.dll to be enabled inside of php.ini in order to use these functions. Previous versions of PHP enabled these extensions by default.

You are responsible for installing support for the various COM objects