PHP - Как вывести ошибки оболочки на экран


Я нахожусь в процессе использования shell_exec() в первый раз. Я пытаюсь конвертировать некоторые видеофайлы на своем сервере с помощью сценария оболочки ffmpeg.

Когда я использую приведенный ниже код в браузере, он возвращает значение NULL:

var_dump(shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4"));

Однако, когда я запускаю эквивалентный код в своем терминале:

> ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4

Я получаю обратно целую кучу полезной информации, которая заканчивается ошибкой "At least one output file must be specified"

Почему эта информация не передается обратно в мой PHP-скрипт, чтобы я мог ее повторить?

Author: koopajah, 2013-02-26

1 answers

Данные об ошибках выводятся из потока целевой программы STDERR. Вы можете получить доступ к данным об ошибках через обычную возвращаемую строку из shell_exec(), добавив 2>&1 к команде, которая перенаправит STDERR в STDOUT поток, который вы сейчас видите:

var_dump(shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4 2>&1"));

Возможно, вы также захотите взглянуть на proc_open() что позволит вам получить доступ к STDIN, STDOUT и STDERR в виде трех отдельных потоков, которые могут обеспечить гораздо более точный контроль над целью программа и то, как именно вы обрабатываете ввод и вывод в нее, включая перенаправление всех и каждого из них непосредственно в файл журнала, если это необходимо. Однако имейте в виду, что это гораздо более сложный механизм со множеством подводных камней и опасностей для срабатывания.

Более подробную информацию о стандартных потоках можно найти здесь.

 37
Author: DaveRandom, 2013-02-26 10:32:28