【问题标题】:PHP exec - missing outputPHP exec - 缺少输出
【发布时间】:2010-05-20 20:18:02
【问题描述】:

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

还有其他想法吗?

代码如下:

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

虽然文件被创建(所以基本的 sox 命令是可以的,我也在 windows 命令行中测试了完全相同的命令),但结果和输出都没有给出任何回报(SoX 详细度设置为 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);

输出在哪里:

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


输出:数组(0){ }

文件已正确创建...

【问题讨论】:

  • 请分享您正在使用的代码。

标签: php windows exec sox


【解决方案1】:

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

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

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

输出

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

【讨论】:

  • 我怀疑这是他的问题,这就是我要求提供代码的原因。抱歉,我今天没有投票了!
  • 没什么大不了的,rep 对我来说已经没有太大的意义了。 ;)
  • 我想在你的鞋子里我也会有同样的感觉。超过我 10 倍的代表,而且你在网站上的时间更少。干得好:-)
【解决方案2】:

我怀疑你可能是对的,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);

【讨论】:

  • 因为结果为 0,所以会出现表示调用成功。在命令行下运行I:\SoX/sox --guard -V4 "somedirectory/test.wav" --compression "320.2" "somedirectory/test.mp3"会发生什么?
  • 我得到了 SoX 的调试输出(大约 40 行),其中包含有关编码器等源文件的信息。
  • 如果将somedirectory/test.wavsomedirectory/test.mp3 替换为绝对路径会怎样?
  • 老兄?你是想取笑这个吗?没有冒犯,但你的答案似乎有点随机..从相对路径更改为绝对路径时输出应该发生什么变化?
猜你喜欢
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多