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

2022-08-30 15:37:21

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

当我在浏览器中使用以下代码时,它返回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 脚本,以便我可以将其回显出来?


答案 1

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

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

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

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


答案 2

推荐