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

Ash*_*Ash 23 php shell ffmpeg shell-exec

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

当我在浏览器中的下面的代码时,它返回NULL:

var_dump(shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4"));
Run Code Online (Sandbox Code Playgroud)

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

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

我收到了大量有用的信息,这些信息以错误结束 "At least one output file must be specified"

为什么这些信息没有传回我的PHP脚本,所以我可以回应它?

Dav*_*dom 44

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

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

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

有关标准流的更多信息,请参见此处.