2013-02-26 33 views
15

我正在使用shell_exec()第一次的过程。我正尝试使用ffmpeg外壳脚本来转换我的服务器上的一些视频文件。PHP - 如何获取壳牌错误回显到屏幕

当我下面的代码在浏览器中,它返回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脚本o我可以回应它?

+3

您可以尝试在命令末尾追加'2>&1'以将错误消息重定向到标准输出 – koopajah 2013-02-26 10:25:47

回答

33

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

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

看看proc_open()这将允许你访问STDIN,STDOUTSTDERR作为三个单独的数据流,它可以对目标程序提供更精细的控制,以及如何处理它的输入和输出,包括重定向任何和所有如果需要的话,可以将它们直接写入日志文件。请注意,这是一个更复杂的机制,有许多陷阱和绊倒危险。

关于标准流的更多信息可以参考here

+0

Aha!那里是:) – Ash 2013-02-26 10:27:03

+0

嗯,救了我的一天...有一个upvote和一个饼干! – Ikari 2016-09-13 17:44:33