想做一个PHP自动转码的系统,代码如下:
<?php exec("mencoder d:\\input.mpg -o d:\\test.flv -oac mp3lame -lameopts cbr:br=32 -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=1024:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6 -vf scale=970:520",$out,$status);
print_r($out);
print_r($status);
?>
运行结果为:Array ( ) 1
而在D:盘下并没有发现转码后的test.flv文件,如果我直接在CMD下输入mencoder d:\input.mpg -o d:\test.flv -oac mp3lame -lameopts cbr:br=32 -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=1024:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6 -vf scale=970:520
这个命令就可以正常转码?这是为什么呢?我用的是windows7+apache+mysql系统,并且已经有EXEC执行权限(当我执行exec("ipconfig",$out)的时候可以正常显示IP)
<?php exec("mencoder d:\\input.mpg -o d:\\test.flv -oac mp3lame -lameopts cbr:br=32 -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=1024:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6 -vf scale=970:520",$out,$status);
print_r($out);
print_r($status);
?>
运行结果为:Array ( ) 1
而在D:盘下并没有发现转码后的test.flv文件,如果我直接在CMD下输入mencoder d:\input.mpg -o d:\test.flv -oac mp3lame -lameopts cbr:br=32 -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=1024:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6 -vf scale=970:520
这个命令就可以正常转码?这是为什么呢?我用的是windows7+apache+mysql系统,并且已经有EXEC执行权限(当我执行exec("ipconfig",$out)的时候可以正常显示IP)
用dirname(__FILE__)形式指定文件路径试试
mencoder d:\\input.mpg -o d:\\test.flv
给一个如下的例子:
if(PHP_OS == 'WINNT') { pclose(popen('run '.escapeshellarg($main->getConfig("phpcli_binary")).' -f convert.php convert '.$mid." > nul 2>&1", 'r')); }
else {
$info = exec(escapeshellarg($main->getConfig("phpcli_binary"))." -f convert.php convert ".$mid." > /dev/null 2>&1 &");
}
上面这段代码是 ostube系统中的,你可以看一下他们的做法
考虑到你的结果文件是存放在根目录的这一事实,建议将结果文件改置于子目录中,并对该子目录赋予一般用户完全控制权