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