在我们使用的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> '代表什么?我想将流程细节转储到一个文件,我该怎么做?
非常感谢。
在我们使用的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> '代表什么?我想将流程细节转储到一个文件,我该怎么做?
非常感谢。
2>&1
重定向«stderr
»到«stdout
»,&
末使得background运行的命令。
为了使它完成它应该是
«command» 2>&1 > /tmp/somefile.log &
没有重定向«stdout
»到一个文件(或/dev/null
)从system()
后台运行并没有太大的意义,因为你的命令会被打死的一旦PHP终止(例如达到时间限制)。
从system()
手册:
注:如果程序开始 此功能,以便它 在后台继续运行, 该程序的输出必须 重定向到一个文件或其他输出 流。否则将导致 PHP挂起,直到执行 程序结束。
2> & 1将标准错误(2)日志重定向到标准输出(1)。
不知道多余的&在最后。
如果您想将标准错误或标准输出传输到文件,可以轻松完成。
管道错误输出到一个文件中,更改2> & 1至2>文件路径
凡filepath是preferrably绝对文件路径(例如:2> /home/user/output.mpg)
每个UNIX程序都有两个输出流:stdout和stderr。为了重定向,>符号将stdout(文件描述符1)重定向到一个文件。 “2>”将stderr(文件描述符2)重定向到一个文件,在这种情况下表示为“& 1”,它告诉shell使用文件描述符1(它是stdout)。在php上下文中,这意味着这两个流都将打印在您的脚本输出中,您现在已经猜到了这一点。
命令末尾的&通知shell在后台运行作业。我不知道你为什么想在这种环境下做到这一点。
如果你想写通过PHP文件,你也可以使用[exec()][1]
或[passthru()][2]
具有选项从命令返回的所有内容。 system()
只会返回最后一行。
让&使命令运行而不等待输出。这可以帮助运行并发的PHP脚本。相比于并行运行它们,想象一下100个cUrl调用。 – fred 2012-02-29 06:27:31