PHP - Как заставить ошибки Shell выходить на экран

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

Когда я укажу ниже код в браузере, он возвращает 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 script, поэтому я могу повторить ее?

Ответы

Ответ 1

Данные об ошибках выводятся из потока целевой программы 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 как три отдельные потоки, которые могут позволить намного более мелкомасштабный контроль над целевой программой и точно как вы обрабатываете ввод и вывод на него, включая перенаправление всех и каждого из них непосредственно в файл журнала, если это необходимо. Имейте в виду, что это гораздо более сложный механизм с множеством подводных камней и опасностью отключения.

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