1

私は現在、PHPを介してSoXを機能させようとしています。これまでのところすべて機能していますが、出力が返されません。stderrを「2>&1」の出力にもルーティングする可能性があることをすでに読みました。問題は、これが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)


出力:array(0){ }

ファイルが正しく作成されました...

4

2 に答える 2

4

2 番目の出力配列パラメータを渡していますか?

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

2>&1Windows がこのステートメントを好まないというあなたの意見は正しいと思います。試してみると何が表示されますか:

$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 に答える