Я схожу с ума от этого. Я использую sox для конвертации файлов, обрезки их, применения некоторых эффектов и т. Д.
Я использую php-скрипты для вызова программы, и она работает нормально, за исключением случаев, когда я пытаюсь получить выходную информацию, например, чтобы получить статистику файла и сохранить ее в переменной:
<?php
exec("/usr/bin/sox uploads/jingle.wav -n stat", $outputrms);
var_dump($outputrms);
?>
//also tried
<?php
$outputrms = shell_exec("/usr/bin/sox uploads/jingle.wav -n stats");
var_dump($outputrms);
?>
Всегда получаю нулевой ответ или пустой массив. Если я иду в командную строку, он работает просто отлично, показывая:
Overall Left Right
DC offset 0.003469 0.003469 0.003469
Min level -0.971375 -0.971375 -0.971313
Max level 0.999969 0.999969 0.999969
Pk lev dB -0.00 -0.00 -0.00
RMS lev dB -14.37 -14.37 -14.37
RMS Pk dB -5.94 -5.94 -5.94
RMS Tr dB -66.86 -66.86 -66.86
Crest factor - 5.23 5.23
Flat factor 0.00 0.00 0.00
Pk count 7 7 7
Bit-depth 16/16 16/16 16/16
Num samples 136k
Length s 3.082
Scale max 1.000000
Window s 0.050
Что я делаю не так?
С уважением
Похоже, sox отправлял вывод как вывод предупреждения, а не как стандартный вывод. Я только что добавил 2>&1 в конце кода и это решило.
<?php
exec("/usr/bin/sox uploads/jingle.wav -n stat", $outputrms 2>&1);
var_dump($outputrms);
?>
exec('sox assets/test.mp3 -n stat 2>&1', $output);
print_r($output);
использование 2>&1 хорошо, и я не знаю почему …