PHP's exec()不能访问网络驱动器


PHP's exec() can't access network drive

在PHP中,我通过调用exec("dir ...")列出一些文件。然而,奇怪的是,这只适用于本地驱动器。在网络驱动器上,它具有非零结果状态码,并且不返回任何结果。

我在Windows XP Professional上运行Apache。

有什么技巧可以解决这个问题吗?或者查看错误消息?

编辑:apache运行在相同的用户下,我可以从命令行

我想说"你也不能从命令行做到这一点",我确信这曾经是真的,但我刚刚在WinXP Pro SP3上尝试过,它正在工作,只是为了让我生气。

前一段时间我必须让PHP与网络驱动器通信(当时我在PHP世界中是绝对绿色的),我有一个噩梦让它工作,但最终我通过以下操作使它工作:

    在"Services"MMC管理单元中,将Apache运行的用户帐户更改为本地用户。它现在可能会被设置为SYSTEM,并且(AFAIK)该帐户没有访问网络驱动器的权限。执行此操作后,您需要重新启动服务。
  • 在您尝试访问它之前添加以下行:system('net use Z: "''servername'sharename" PASSWORD /user:USERNAME /persistent:no');,您可以在其中更改驱动器号,UNC路径,用户名等以匹配您的要求。即使驱动器已经映射,也要执行此操作。我似乎记得我必须使用system()而不是exec()shell_exec(),否则它不起作用-因此,您需要输出缓冲区来阻止输出传递给STDOUT。

我不知道为什么这工作,但它确实做到了。但是请注意,我试图将驱动器与本地PHP函数(如opendir()fopen())一起使用,而不是试图将外部程序exec()用于它。

如果要查看调用dir的错误消息,请将2>&1附加到命令的末尾。这会将STDERR重定向到STDOUT,因此您应该在exec()的结果中得到错误消息。

所以你的行看起来像:

exec("dir Z:''some''path 2>&1")