Дамп вывода системной команды php в файл - PullRequest
3 голосов
/ 20 апреля 2009

В системной команде php мы используем следующее

system("ffmpeg -i test.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv output_file.flv 2>&1 &"). 

Пожалуйста, объясните использование вышеупомянутой системной команды. Что означает «2> & 1 &»? Я хочу записать детали процесса в файл. Как мне это сделать?

Большое спасибо.

Ответы [ 4 ]

10 голосов
/ 20 апреля 2009

2>&1 перенаправляет «stderr» до «stdout» , & в конце заставляет команду работать в background .

Чтобы завершить это должно быть

«command» 2>&1 > /tmp/somefile.log &

Без перенаправления «stdout» в файл (или в /dev/null), работающий в фоновом режиме из system(), не имеет особого смысла, так как ваша команда будет убита, как только PHP завершается (например, достигнуто ограничение по времени).

С system() руководство:

Примечание: если программа запущена с эта функция, чтобы она продолжать работать в фоновом режиме, вывод программы должен быть перенаправлен в файл или другой вывод поток. Невыполнение этого требования приведет к PHP повесить до выполнения Программа заканчивается.

1 голос
/ 20 апреля 2009

Каждая UNIX-программа имеет два выходных потока: stdout и stderr. В целях перенаправления символ> перенаправляет стандартный вывод (дескриптор файла 1) в файл. «2>» перенаправляет stderr (дескриптор файла 2) в файл, представленный в этом случае как «& 1», который указывает оболочке использовать дескриптор файла 1 (который является stdout). В контексте php это означает, что оба потока будут напечатаны в выводе вашего скрипта, который вы теперь сомневаетесь, выяснили.

Символ & в конце команды указывает оболочке запустить задание в фоновом режиме. Я не знаю, почему вы хотели бы сделать это в этой среде.

1 голос
/ 20 апреля 2009

2> & 1 перенаправляет журнал стандартной ошибки (2) на стандартный выход (1).

Не уверен, что делает extra & в конце.

Если вы хотите передать stderr или stdout в файл, вы можете сделать это легко.

Чтобы передать stderr в файл, измените 2> & 1 на 2> filepath

Где путь к файлу предпочтительно является абсолютным путем к файлу (например: 2> /home/user/output.mpg)

0 голосов
/ 20 апреля 2009

Если вы хотите записать в файл через PHP, вы также можете использовать [exec()][1] или [passthru()][2], которые имеют опции для возврата всего содержимого из команды. system() вернет только последнюю строку.

...