27

我是shell_exec()第一次使用。我正在尝试使用 ffmpeg shell 脚本在我的服务器上转换一些视频文件。

当我在浏览器中执行以下代码时,它返回 NULL:

var_dump(shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4"));

但是,当我在终端中运行等效代码时:

> ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4

我得到了一大堆有用的信息,这些信息以错误结尾"At least one output file must be specified"

为什么这些信息没有被传回我的 PHP 脚本,以便我可以将其回显?

4

1 回答 1

56

错误数据从目标程序的STDERR流中输出。shell_exec()您可以通过附加2>&1到命令的正常返回字符串来访问错误数据,该命令将重定向STDERRSTDOUT您当前看到的流:

var_dump(shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4 2>&1"));

您可能还想看看proc_open()哪些将允许您访问STDIN和作为三个单独的流,它们可以提供对目标程序的更细粒度的控制,以及您如何处理它的输入和输出,包括重定向STDOUT任何STDERR如果需要,所有这些都直接写入日志文件。请注意,这是一个复杂得多的机制,存在许多陷阱和绊倒危险。

可以在此处找到有关标准流的更多信息。

于 2013-02-26T10:26:07.483 回答