将php系统命令输出转储到文件

时间:2009-04-20 16:46:38

标签: php system command background-process

在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 个答案:

答案 0 :(得分:10)

2>&1«stderr»重定向到«stdout»,最后&使命令在background中运行。

要完成它应该是

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

没有将«stdout»重定向到从system()后台运行的文件(或/dev/null)没有多大意义,因为你的命令会在PHP中被杀死终止(例如达到时间限制)。

来自system()手册:

  

注意:如果程序启动了   这个功能,为了它   继续在后台运行,   程序的输出必须是   重定向到文件或其他输出   流。如果不这样做将会导致   PHP挂起,直到执行   程序结束。

答案 1 :(得分:1)

2>& 1将标准错误(2)日志重定向到标准输出(1)。

不确定额外的&最后呢。

如果要将stderr或stdout传递给文件,可以轻松完成。

要将stderr管道传输到文件,请将2>& 1更改为2> filepath

文件路径最好是绝对文件路径(例如:2> /home/user/output.mpg)

答案 2 :(得分:1)

每个UNIX程序都有两个输出流:stdout和stderr。出于重定向的目的,> symbol将stdout(文件描述符1)重定向到文件。 “2>”将stderr(文件描述符2)重定向到一个文件,在本例中用“& 1”表示,它告诉shell使用文件描述符1(stdout)。在php上下文中,这意味着两个流都将打印在您的脚本输出中,您现在怀疑它已经找到了。

&在命令的末尾告诉shell在后台运行作业。我不知道你为什么要在这种环境下这样做。

答案 3 :(得分:0)

如果要通过PHP写入文件,还可以使用[exec()][1][passthru()][2],它们具有从命令返回所有内容的选项。 system()只会返回最后一行。