PHP exec - 缺少输出

时间:2010-05-20 20:18:02

标签: php windows exec sox

我目前正在努力让SoX通过PHP工作。这一切都工作到目前为止,但我没有得到输出。我已经读过,可能会将stderr路由到输出“2>& 1”..问题是,这似乎不适用于Windows机器。

还有其他想法吗?

代码如下:

exec($path2sox . '/sox ' . $cmd . ' 2>&1', $output = array(), $result);

虽然文件被创建(所以基本的sox命令没问题,我也在windows命令行中测试了它完全相同的命令),但结果和输出都没有给出回报(SoX verbosity设置为4,这是完整的输出)

我想,Windows并不理解2>& 1语句,但如何克服这个问题呢?

P.S:如下所示,我也试过了这个

$output = array();
echo "Executing: [$path2sox/sox $cmd]";
exec("$path2sox/sox $cmd", $output, $result);
echo "Result: ";
var_dump($result);
echo "\n
Output: "; var_dump($output);

输出为:

Executing: [I:\SoX/sox --guard -V4 "somedirectory/test.wav" --compression "320.2" "somedirectory/test.mp3"]Result: int(0)


Output: array(0) { }

文件已正确创建...

2 个答案:

答案 0 :(得分:4)

您是否传递了第二个输出数组参数?

http://us2.php.net/manual/en/function.exec.php

string exec ( string $command [, array &$output [, int &$return_var ]] )
  

输出

     

如果输出参数存在,   然后指定的数组将是   充满了每一行输出   命令。尾随空白,如此   as \ n,不包含在此数组中。   注意,如果数组已经   包含一些元素,exec()会   追加到数组的末尾。如果你   不希望函数追加   元素,在数组上调用unset()   在将它传递给exec()之前。

答案 1 :(得分:1)

我怀疑你可能是对的,Windows不喜欢2>&1声明。你在尝试时看到了什么:

$output = array()
echo "Executing: [$path2sox/sox $cmd]";
exec("$path2sox/sox $cmd", $output, $result);
echo "Result: ";
var_dump($result);
echo "\n<br>Output: ";
var_dump(output);