2009-04-20 29 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)。

不知道多余的&在最后。

如果您想将标准错误或标准输出传输到文件,可以轻松完成。

管道错误输出到一个文件中,更改2> & 1至2>文件路径

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

1

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

命令末尾的&通知shell在后台运行作业。我不知道你为什么想在这种环境下做到这一点。

+1

让&使命令运行而不等待输出。这可以帮助运行并发的PHP脚本。相比于并行运行它们,想象一下100个cUrl调用。 – fred 2012-02-29 06:27:31

0

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