作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我是第一次使用 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
我得到了一大堆有用的信息,但以错误结束“至少一个输出文件必须指定”
为什么此信息没有传回我的 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()
这将允许您作为三个单独的流访问 STDIN
、STDOUT
和 STDERR
,从而可以对目标程序进行更精细的控制以及您如何处理输入和输出的确切方式,包括根据需要将所有这些直接重定向到日志文件。但请注意,这是一个复杂得多的机制,存在许多陷阱和绊倒危险。
有关标准流的更多信息,请访问 here .
关于PHP - 如何让 Shell 错误回显到屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15086572/
我是一名优秀的程序员,十分优秀!