无法将远程Openfiles.exe数据拉入PHP

时间:2012-09-21 08:45:23

标签: php windows apache shell-exec

我正在尝试使用openfiles.exe来获取远程服务器上当前打开的文件的信息。我可以从命令提示符运行Web服务器所在的命令,因此我知道它在Web服务器和我正在尝试定位的服务器之间起作用。但是,当我尝试在PHP中调用相同的命令时,我得到一个Apache错误日志条目:“错误:目标系统必须运行Windows XP或更高版本。” Web服务器在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似乎有同样的问题......

1 个答案:

答案 0 :(得分:3)

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

编辑 - 完整帖子:

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

在XP版本的openfiles上,有/ u和/ p选项可以传递用户名和密码;坚持在那里测试域名管理员凭据,看看是否有效。如果是,请创建一个没有文件存储权限的受限AD帐户并使用这些凭据或其他内容,以确保没有人可以窃取您的主域管理员帐户。