2013-04-26 4 views
0

У меня есть код PHP, который, между прочим, использует system() для вызова ffmpeg для кодирования видео. Когда я запускаю это из командной строки, я могу перенаправить вывод PHP-скрипта в файл обычным способом - php mycode.php > mycode.log - и я получаю не только любые заявления о печати, которые я вызываю в PHP, но и материал, созданный ffmpeg , который я хочу. Все хорошо.Как перенаправить вывод вызываемой программы в файл?

Теперь, однако, я хочу, чтобы запустить скрипт в фоновом режиме через веб-страницу: Я делать некоторые вещи на моем сайте, который вызывает это запустить:

$the_command = "/bin/php $php_file_name > $log_file_name &"; 
$the_result = system($the_command, $retval); 

Это успешно работает мой сценарий в фоновый PHP-процесс, и мои видео по-прежнему получают кодировку ffmpeg. Тем не менее, единственное, что я получаю в моем перенаправленном файле журнала, - это инструкции печати в скрипте - вывод вызовов ffmpeg отправляется куда-то в эфир. Есть ли способ получить их в файле журнала?

ответ

1

Попробуйте это:

$the_command = "/bin/php $php_file_name > $log_file_name 2>&1"; 
+1

Yup - что это делает. Большое спасибо! –

+0

потрясающий! рад, что это сработало для вас! :-) – Tony

1

IMHO - потому что ffmpeg пишет свои сообщения stderr. Так, попробовать что-то вроде:

$res = shell_exec("ffmpeg your_args >/tmp/log 2>&1 &"); 

этого следует перенаправить как stdout и stderr в файл.

Смежные вопросы