3

我正在尝试使用 openfiles.exe 来获取远程服务器上当前打开的文件的信息。我可以从命令提示符运行 web 服务器已打开的命令,所以我知道它在 web 服务器和我试图定位的服务器之间工作。但是,当我尝试在 PHP 中调用相同的命令时,我得到一个 Apache 错误日志条目:“错误:目标系统必须运行 Windows XP 或更高版本。” 网络服务器在 Xp Pro 上运行,目标服务器在 Windows Server 2003 上。从命令提示符下,该命令完美运行,即使对于网络上较旧的 Windows 2000 服务器,只是当我从 PHP 运行它时,它似乎有一个问题。有没有人对为什么和/或如何解决这个问题有任何想法?

我正在使用的代码是:

$output = shell_exec("openfiles /query /s servername");
echo $output;
  $i = 0;
  $c = count($output);

  while ($i < $c) {
    $dump = $output[$i];
    echo $dump ."<br>";
    $i++;
  }

shell_exec()、system() 和 exec() 的行为完全相同,从批处理文件运行命令也是如此。一个稍微有趣的转折是,如果我删除“/s servername”部分,它会输出以下内容:

Files Opened Remotely via local share points:
---------------------------------------------
INFO: No shared open files found.

...所以就好像 /s 标志是扔它的东西。就像我说的,它在命令提示符下工作正常,所以我知道可执行文件能够从目标服务器中提取信息;我只需要找出为什么 PHP 在做同样的事情时似乎有问题......

4

1 回答 1

3

您的 Apache 服务器在错误的帐户下运行,并且没有远程 IPC$ 共享的权限;)

编辑 - 完整的帖子:

可能是权限?Apache 以什么用户身份运行?当您从命令提示符处执行此操作时,您可能是以域管理员帐户或其他具有正确权限的帐户来连接到远程计算机上的 IPC$ 共享(IIRC 就是这样完成的)。而 Apache 可能不会,并且当实际发生的情况是它无法联系 IPC$ 共享并假设远程计算机没有 Windows XP 或更高版本时,它可能只是一个误导性的错误消息......

Looks like on the XP version of openfiles, there's /u and /p options to pass a username and password; stick domain admin credentials in there to test, and see if that works. If it does, create a restricted AD account with no filestore permissions and use those credentials or something, to make sure no one can steal your main domain admin account.

于 2012-09-21T09:56:54.063 回答