2009-04-20 10 views
3

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

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

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

спасибо.

ответ

10

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

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

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

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

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

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

1

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

Не уверен, что дополнительные & в конце концов делает.

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

Для трубы STDERR в файл, изменить 2> & 1 до 2> FilePath

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

1

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

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

+1

Обрамление и делает команду бежать, не дожидаясь выхода. Это может помочь при запуске параллельных PHP-скриптов. Представьте 100 вызовов cUrl последовательно, по сравнению с их параллельным запуском. – fred

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^