【问题标题】:Reading file and directory owner using PHP on the Windows在 Windows 上使用 PHP 读取文件和目录所有者
【发布时间】:2019-06-05 18:24:26
【问题描述】:

我有一个基于 Windows 上的 PHP 和 xampp 服务器的 Intranet 项目。那个 Intranet 项目有一个带有表的数据库,我在其中存储扫描的文件和文件夹的磁盘驱动器信息。我使用简单的 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() 类。

我的主要问题是:

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

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

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

【问题讨论】:

    标签: php windows shell file-ownership


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好像路径名中有多字节字符的话,就不能正常工作了。有人知道解决办法吗?
    • 是的,您需要将文件名转换为 UTF-8 才能正常显示。但是比较和包含文件只能使用直接路径。这有点复杂,但这是唯一的方法。看看我为编码所做的这个 repo:github.com/CreativForm/PHP-Solutions/blob/master/…
    猜你喜欢
    • 1970-01-01
    • 2013-11-27
    • 2014-11-10
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2013-12-02
    • 2018-03-28
    相关资源
    最近更新 更多