我正在尝试在PHP中运行以下命令(在Ubuntu上):
<?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 :(得分:4)
让stderr给出结果
试
ffmpeg -i inputfile [more_params] 2>&1
答案 1 :(得分:2)
apache / web用户可以访问/home/johnboy/ffmpeg/ffmpeg
吗?也就是说,也许/home/johnboy
是0700而不是0755?
也许有资源限制会影响这样一个大型程序及其所有库的加载?
如果您将脚本运行到php cli sapi,它是否正常运行?即使以apache用户身份运行?
当apache web用户通过php cli运行php脚本时strace -ff
显示什么?
答案 2 :(得分: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");
答案 3 :(得分:1)
您正在使用文件名的相对路径。您确定在正确的目录中执行命令吗?
答案 4 :(得分:1)
如果你想以这种方式执行某些事情会有一些问题
1.也许你有一些权限问题,网络服务器有限制处理一些系统执行
2.也许您的路径文件不正确
3.您可以尝试使用shell_exec来执行系统执行。
无论如何,我要做的是让我的执行顺利进行,
我将编写2个程序,其中包含消息传递,例如客户端服务器程序。
服务器会等待来自客户端的一些消息来执行一些命令(所有命令,它都没有权限问题)。您在Web上所要做的就是致电您的客户端应用程序。
我强调的是从网络和系统构建一些界面。它会解决许可问题带来的很多问题。
希望这有帮助。答案 5 :(得分:0)
函数exec()只返回输出的最后一行,我怀疑该命令的最后一行是空白的。如果你想要命令的全部内容,你应该使用shell_exec()。
还要跟踪命令的执行位置,尝试:print(shell_exec("pwd"));
答案 6 :(得分:0)
启用安全模式,它将起作用
答案 7 :(得分:0)
$output = shell_exec('/home/person/www/ffmpeg 2>&1');
echo "<pre>$output</pre>";
注意2&gt;&amp; 1部分......