1

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

还有其他想法吗?

代码如下:

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

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

我想,windows 不理解 2>&1 语句,但是如何克服呢?

PS:如下所示,我也试过这个

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

输出是:

执行:[I:\SoX/sox --guard -V4 "somedirectory/test.wav" --compression "320.2" "somedirectory/test.mp3"]结果:int(0)


输出:数组(0){ }

文件已正确创建...

4

2 回答 2

4

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

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

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

输出

如果存在输出参数,则指定的数组将填充命令的每一行输出。此数组中不包含尾随空格,例如 \n。请注意,如果数组已经包含一些元素,则 exec() 将附加到数组的末尾。如果您不希望函数附加元素,请在将数组传递给 exec() 之前对数组调用 unset()。

于 2010-05-20T20:22:14.337 回答
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);
于 2010-05-20T21:19:59.930 回答