3

在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

4 回答 4

10

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

为了使它完整,它应该是

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

如果不将 « » 重定向到在后台运行stdout的文件(或到) from没有多大意义,因为您的命令会在 PHP 终止后立即被终止(例如达到时间限制)。/dev/nullsystem()

system()手册:

注意:如果使用此功能启动程序,为了使其继续在后台运行,程序的输出必须重定向到文件或另一个输出流。否则将导致 PHP 挂起,直到程序执行结束。

于 2009-04-20T16:49:03.740 回答
1

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

不确定最后的额外 & 是做什么的。

如果您想通过管道将 stderr 或 stdout 传输到文件,您可以轻松地做到这一点。

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

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

于 2009-04-20T16:49:17.297 回答
1

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

命令末尾的 & 告诉 shell 在后台运行作业。我不知道您为什么要在这种环境中执行此操作。

于 2009-04-20T16:53:19.360 回答
0

如果您想通过 PHP 写入文件,您还可以使用[exec()][1]or [passthru()][2]which have options 从命令中返回所有内容。system()只会返回最后一行。

于 2009-04-20T17:01:04.770 回答