在PHP中,我通过调用exec("dir ...")
列出了一些文件。但是,这奇怪地只适用于本地驱动器。在网络驱动器上,它具有非零结果状态代码,并且不返回任何结果。
我在Windows XP Professional上运行Apache。
有什么技巧可以解决这个问题吗?或者查看错误消息?
编辑:apache和我一样在同一个用户下运行,我可以从命令行执行此操作
答案 0 :(得分:4)
我打算说“你不能从命令行做到这一点”,我确信过去是真的,但我刚试过WinXP Pro SP3并且它正在工作,只是为了恶意我
我不得不让PHP在一段时间之前与网络驱动器交谈(当时我在PHP世界中显得更加环保),我有一个噩梦让它工作,但最终我设法让它工作执行以下操作:
system('net use Z: "\\servername\sharename" PASSWORD /user:USERNAME /persistent:no');
,您可以在其中更改驱动器号,UNC路径,用户名等以符合您的要求。即使已映射驱动器,也请执行此操作。我似乎记得我必须使用system()
而不是exec()
或shell_exec()
或者它不起作用 - 因此,您需要输出缓冲区来停止输出传递到STDOUT。我不知道为什么会这样,但确实如此。但请注意,我尝试将驱动器与opendir()
和fopen()
等本机PHP函数一起使用,而不是尝试exec()
针对它的外部程序。
如果要查看来自dir
的呼叫的错误消息,请将2>&1
附加到命令的末尾。这会将STDERR重定向到STDOUT,因此您应该在exec()
的结果中获取错误消息。
所以你的行看起来像:
exec("dir Z:\\some\\path 2>&1")