2

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

我在 Windows XP Professional 上运行 Apache。

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

编辑: apa​​che 与我在同一个用户下运行,我可以从命令行执行

4

1 回答 1

5

我本来想说“你也不能从命令行执行它”,我确信这曾经是真的,但我刚刚在 WinXP Pro SP3 上进行了尝试,它正在工作,只是为了惹恼我。

前段时间我不得不让 PHP 与网络驱动器通信(当我在 PHP 的世界中显然更加环保时),我做了一个噩梦让它工作,但最终我设法通过执行以下操作让它工作:

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

我不知道为什么会这样,但确实如此。但请注意,我试图将驱动器与原生 PHP 函数(如opendir()and )一起使用fopen(),而不是尝试exec()使用外部程序来对抗它。

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

所以你的行看起来像:

exec("dir Z:\\some\\path 2>&1")
于 2011-12-15T18:17:02.377 回答