问题描述
我有一个基于 Windows 上的 PHP 和 xampp 服务器的 Intranet 项目.该 Intranet 项目具有带表的数据库,我在其中存储文件和文件夹的扫描磁盘驱动器信息.我使用简单的 windows 命令 dir "$directory_path"/Q/T:C
来获取信息.
I have an intranet project based on the PHP and xampp server on the Windows. That intranet project have database with table where I store scanned disc drive informations of files and folders. I using simple windows command dir "$directory_path" /Q /T:C
to get informations.
之后,我使用正则表达式来匹配和解析该信息以分隔日期、时间、权限和目录名称,如本例所示:
After that I use regex to match and parse that info to separate date, time, permission and dir name like on this example:
类似于这个例子:使用 PHP 在 Windows 中获取文件所有者一个>
这个工作正常,但有时文件所有者名称真的很长并且被命令行剥离.在这种情况下,我无法读取全名并且功能已损坏.
This working fine but sometimes file owner names are realy long and was stripped by command line. In that case I can't read full name and functionality is broken.
现在我正在寻找另一种解决方案.
Now I searching for another solution.
我的 PHP 也安装了 php_com_dotnet.dll
扩展,我在代码的某些部分使用了 COM()
类.
My PHP have instaled also php_com_dotnet.dll
extension and I using COM()
class in some part of code.
我的主要问题是:
-我可以使用 COM()
类来获取真实的文件信息并避免使用 shell 命令进行文件搜索和列表吗?
-Can I use COM()
class to get real file informations and avoid shell commands for the file search and listings and how?
-是否有其他扩展名、shell 命令或第三种我可以用来获取文件/文件夹所有者的东西?
-Is there some another extension, shell command or something 3rd what I can use to get file/folder owners?
注意:我只需要在数据库中读取和索引,不需要更改权限或所有权.
NOTE: I need this only for the reading and indexing in the database, don't need to change permissions or ownership.
推荐答案
我找到了使用 PHP 类的简单解决方案 COM() 和 IADsSecurityUtility::GetSecurityDescriptor 方法.
I find simple solution for this using PHP class COM() and the documentation of the IADsSecurityUtility::GetSecurityDescriptor method.
PHP 中的代码如下所示:
The code in PHP looks like this:
$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 运行时.
.Net support requires PHP 5 and the .Net runtime.
自 PHP 5.3.15/5.4.5 起,此扩展需要 php_com_dotnet.dll要在 php.ini 中启用才能使用这些功能.以前的 PHP 版本默认启用这些扩展.
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.
您负责安装对各种 COM 对象的支持
这篇关于在 Windows 上使用 PHP 读取文件和目录所有者的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!