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