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

Я впервые использую 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-скрипт, поэтому я могу повторить ее?

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

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

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