2012-03-19 183 views
4

我试图通过一个PHP EXEC调用运行ffmpeg,我已经调试了一段时间,看了很多回复,但是仍然没有找到任何答案...PHP ffmpeg exec返回null

我的简化呼叫是:

$cmd = 'ffmpeg 2>&1'; 

exec(escapeshellcmd($cmd), $stdout, $stderr); 

var_dump($stderr); 
var_dump($stdout); 
var_dump($cmd); 
exit; 

我的输出为$标准错误= INT(1)和$标准输出=阵列(0){}

另外我试图shell_exec($cmd)它返回NULL

cmd.exe具有为IUSR帐户设置的权限 - 例如,我可以运行$cmd = 'dir'并查看目录列表输出。

PHP未在安全模式下运行。

ffmpeg.exe与我的php文件位于同一目录中,但我有相同的响应,给出了$cmd中的ffmpeg.exe文件的绝对路径。

ffmpeg从命令行执行得很好。

我正在运行Windows XP,IIS和PHP 5.3。

编辑:

如果我跑“的ffmpeg -h”我得到的帮助命令,必须指出的ffmpeg是公认

我增加了PHP内存限制1024 - 没有运气。

+0

exec()的第二个参数是'return value',而不是'stderr'。返回值1意味着它发生了错误。我不知道为什么你看不到$ stdout中的错误输出。 – 2012-03-19 13:09:37

+0

注意到感谢Rob。 – 2012-03-19 13:14:23

回答

5

我现在得到这个工作 - 我认为有可能是几个问题:

事实证明,$cmd = 'ffmpeg'返回NULL,所以它不是一个很好的测试!

上 '2> & 1' 还运行逃生shell命令呼应2 ^>^& 1" - 我认为这是我原来的问题

我现在一直在使用管理,以REA测试文件:“ffmpeg的。-i SAMPLE.AVI 2> & 1'

工作代码:

$cmd = 'ffmpeg -i SAMPLE.AVI 2>&1'; 

exec($cmd, $output, $value); 

var_dump($output); 
var_dump($value); 
var_dump($cmd); 
exit; 

如以上指出的ffmpeg是有点内存猪的,所以这是值得检查存储器太

+0

换句话说,ffmpeg只写入stderr而不是stdout? – DanMan 2012-05-09 09:41:30

+0

该命令不返回null,它将列出配置。用'$ cmd ='显示默认输出ffmpeg 2> &1';' – Raptor 2016-10-18 03:00:33