2013-12-16 25 views
4

我在shell_exec()PHP - 在浏览器中输出了shell_exec是空

wget_file.php

<?php 
$command = "wget http://mydomain.co/media/bigbigbig.wav"; 
$output = shell_exec($command); 
echo $output; 
?> 

运行一个简单的命令wget根据http://www.php.net/shell_exec我都不可能想到的输出: “的从执行的命令输出,或者如果发生错误或者该命令不产生输出,则返回NULL。“

如果我从命令行运行wget_file.php,我会看到wget结果的显示。 但是,如果我从浏览器运行它,没有结果。 (但文件确实下载成功)

我打算通过调用cUrl执行wget_file.php,同时传递url +路径。 但是,在执行完成后,从shell_exec()得到回应会很好。

有谁知道如果我只是缺少一些东西来获得输出(在浏览器中运行)?

回答

7

如果我在命令行中运行wget_file.php,我会看到的wget的显示效果

wget不输出文件的内容由默认的控制台,所以想必你”重新谈论状态信息。

我想像这是输出到STDERR而非STDOUT,它的标准输出是shell_exec在你的PHP脚本获得你:

  • ,当你在命令行中运行脚本,你仍然看到输出,因为两个流都由单个终端窗口共享;它只是直接从wget而不是从你的PHP脚本中看到它;

  • 在通过Apache和浏览器传递以满足Web请求的情况下,此终端上下文与用户看到的结果断开连接。

在你的shell命令,您可以前者重定向到后者:

$command = "wget http://mydomain.co/media/bigbigbig.wav 2>&1"; 

关于这个在the documentation for shell_exec触摸的意见,特别是—儿— very first one

+0

很好的解释。我没有注意到STDERR和STDOUT。 – coffeemonitor