在 PHP 中,我通过调用exec("dir ...")
. 但是,奇怪的是,这仅适用于本地驱动器。在网络驱动器上,它具有非零结果状态代码并且不返回任何结果。
我在 Windows XP Professional 上运行 Apache。
有什么技巧可以解决这个问题吗?或者查看错误信息?
编辑: apache 与我在同一个用户下运行,我可以从命令行执行
在 PHP 中,我通过调用exec("dir ...")
. 但是,奇怪的是,这仅适用于本地驱动器。在网络驱动器上,它具有非零结果状态代码并且不返回任何结果。
我在 Windows XP Professional 上运行 Apache。
有什么技巧可以解决这个问题吗?或者查看错误信息?
编辑: apache 与我在同一个用户下运行,我可以从命令行执行
我本来想说“你也不能从命令行执行它”,我确信这曾经是真的,但我刚刚在 WinXP Pro SP3 上进行了尝试,它正在工作,只是为了惹恼我。
前段时间我不得不让 PHP 与网络驱动器通信(当我在 PHP 的世界中显然更加环保时),我做了一个噩梦让它工作,但最终我设法通过执行以下操作让它工作:
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")