PHP exec - отсутствует вывод - PullRequest
0 голосов
/ 21 мая 2010

Я сейчас пытаюсь заставить SoX работать через PHP. Пока все работает, но я не получаю вывод обратно. Я уже читал, что можно направить stderr также к выводу с "2> & 1" .. проблема в том, что это не работает на машинах с 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<br>Output: ";
var_dump($output);

где вывод:

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

<p><br>Output: array(0) {
}
Файл создан правильно ...

Ответы [ 2 ]

4 голосов
/ 21 мая 2010

Передаете ли вы второй параметр выходного массива?

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

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

выход

Если выходной аргумент присутствует, тогда указанный массив будет заполнены каждой строкой вывода из команда. Задний пробел, такой as \ n, не входит в этот массив. Обратите внимание, что если массив уже содержит некоторые элементы, exec () будет добавить в конец массива. если ты не хочу, чтобы функция добавлялась элементы, вызовите unset () для массива перед передачей в exec ().

1 голос
/ 21 мая 2010

Я подозреваю, что вы правы, что 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);
...