PHP的exec()无法访问网络驱动器

til*_*lda 2 php apache networking exec drive

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

我在Windows XP Professional上运行Apache。

有什么技巧可以解决此问题?还是查看错误消息?

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

Dav*_*dom 5

我要说的是“您也不能从命令行执行此操作”,而且我敢肯定那是真的,但是我刚刚尝试过WinXP Pro SP3,它正在起作用,这只是为了让我生气。

前段时间,我不得不让PHP与网络驱动器进行通信(当时我在PHP世界中确实变得更加环保),我梦had以求地使其工作,但是最终我通过执行以下操作使其得以工作:

  • 在“服务” MMC管理单元中,将运行Apache的用户帐户更改为本地用户。目前,它可能会设置为SYSTEM,并且(AFAIK)该帐户无权访问网络驱动器。完成此操作后,您将需要重新启动服务。
  • 在尝试访问之前,添加以下行:system('net use Z: "\\servername\sharename" PASSWORD /user:USERNAME /persistent:no');,在其中更改驱动器号,UNC路径,用户名等以符合您的要求。即使驱动器已映射,也要执行此操作。我似乎记得我不得不使用system()代替exec()shell_exec()或它不起作用-因此,您需要使用output-buffer来停止将输出传递到STDOUT。

我不知道为什么这样做有效,但确实如此。但是请注意,我试图将驱动器与本机PHP函数(例如opendir()和)一起使用fopen(),而不是尝试exec()针对它使用外部程序。

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

所以你的行看起来像:

exec("dir Z:\\some\\path 2>&1")
Run Code Online (Sandbox Code Playgroud)