2010-03-09 76 views
4

我试图运行在PHP以下命令(在Ubuntu):PHP的exec()不工作的有关ffmpeg

<?php 
if (exec("/home/johnboy/ffmpeg/ffmpeg -i test1.mp4 -acodec aac -ab 128kb -vcodec mpeg4 -b 1220kb -mbd 1 -s 320x180 final_video.mov")) 
     { echo "Success"; } 
     else { echo "No good"; } 

,我总是得到“没有好”回显,并没有文件创建。

有趣的是,如果我在Shell中运行相同的确切命令,它的工作原理没有问题。另外,当我运行上面相同的代码,但是用“whoami”而不是ffmpeg的东西代替它时,它就可以工作。 (它回响“成功”)

任何想法,为什么这不会工作?谢谢。

+0

想通了。显然,该目录是可读的,但不可写。结果,ffmpeg无法创建新文件。我创建了一个不同的输出目录并且chmod it 777,瞧! – Dodinas

回答

2

apache/web用户可以达到/home/johnboy/ffmpeg/ffmpeg吗?也就是说,也许/home/johnboy是0700而不是0755?

也许有资源限制影响这样一个大型程序及其所有库的加载?

如果你运行脚本到php cli sapi,它的行为是否正确?即使作为apache用户运行?

strace -ff当Apache web用户通过php cli运行php脚本时会显示什么?

+0

中的final_video.mov感谢您的回复。我是否确认ffmpeg和johnboy是755处的chmod。另外,我从shell运行了php test.php命令,它运行良好。所以我知道这个剧本有效。它只是不会从网络浏览器运行。我不确定什么是straff -ff,或者我需要运行它? – Dodinas

+0

@Dodinas:你会写strace -ff php file.php> log.txt 2>&1并将其上传到某个地方(仔细看后) 另外,如果php在apache运行时处于安全模式,脚本可能无法运行;检查你的Apache错误日志。 – geocar

+1

@Dodinas:apache是​​否具有对/ var/www目录的写入权限? – geocar

0

您正在使用文件名的相对路径。你确定你在正确的目录下执行命令吗?

+0

是的,因为在shell中,我cd到/ var/www(php文件的位置)并在那里执行命令。因此,它成功创建了导演/ var/www/ – Dodinas

0

函数exec()只返回最后一行输出,我怀疑那个命令的最后一行是空白的。如果你想要命令的全部内容,你应该使用shell_exec()。

而且跟踪,其中正在执行命令的,请尝试:print(shell_exec("pwd"));

+0

有趣我从exec获得一个数组 – kezi

1

,如果你想执行的东西,这样会有一些问题。
1.也许你有一些权限问题,Web服务器有限制处理一些执行系统。
2.也许你的路径文件不正确。
3.您可以尝试使用shell_exec执行系统。

无论如何,我会做什么来使我的执行顺利, 我会写2个程序与他们之间的消息传递,例如客户端服务器程序。 服务器会等待来自客户端的一些消息来执行一些命令(所有的命令,这将是没有权限问题)。所有你必须在你的网站上打电话给你的客户端应用程序。

我强调的是从web和系统建立一些接口。它会解决许多权限问题。

希望得到这个帮助。

4

得到标准错误会给结果

尝试

ffmpeg -i inputfile [more_params] 2>&1 
0

启用安全模式,它会工作

2

使用此

$ffmpeg = "ffmpeg Installed path"; 
$flvfile = "source video file with root path"; 
$png_path " "Destination video file with root path and file type"; 


exec("$ffmpeg -y -i $flvfile -vframes 1 -ss 00:01:60 
    -an -vcodec png -f rawvideo -s 110x90 $png_path"); 
0
$output = shell_exec('/home/person/www/ffmpeg 2>&1'); 
echo "<pre>$output</pre>"; 

注意2> & 1部分...