PHP-如何让Shell错误回显到屏幕上


PHP - How to get Shell errors echoed out to screen

我正在第一次使用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脚本,这样我就可以回显它了?

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

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

您可能还想看看proc_open(),它将允许您将STDINSTDOUTSTDERR作为三个单独的流进行访问,它可以对目标程序以及您如何处理对它的输入和输出提供更细粒度的控制,包括根据需要将它们中的任何一个或全部直接重定向到日志文件。但要注意,这是一个复杂得多的机制,有很多陷阱和绊倒的危险。

关于标准流的更多信息可以在这里找到。