【问题标题】:PHP - How to get Shell errors echoed out to screenPHP - 如何让 Shell 错误回显到屏幕上
【发布时间】:2013-02-11 18:05:25
【问题描述】:

我是第一次使用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 脚本以便我可以回显它?

【问题讨论】:

  • 您可以尝试在命令末尾附加2>&1 以将错误消息重定向到标准输出

标签: php shell ffmpeg shell-exec


【解决方案1】:

错误数据是从目标程序的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 作为三个单独的流,从而可以对目标程序进行更精细的控制以及您如何处理输入和输出的确切方式,包括根据需要将所有这些直接重定向到日志文件。但请注意,这是一个复杂得多的机制,存在许多陷阱和绊倒危险。

有关标准流的更多信息可以找到here

【讨论】:

    猜你喜欢
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2017-12-23
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多