PHP exec未执行命令
我使用php的exec执行FFmpeg命令,但在浏览器中打开它时,它并没有工作。但当我在终端上运行这个php文件脚本时,它工作得很好,我的php安全模式也关闭了。请帮我解决这个问题。我的php代码是PHP exec未执行命令,php,exec,Php,Exec,我使用php的exec执行FFmpeg命令,但在浏览器中打开它时,它并没有工作。但当我在终端上运行这个php文件脚本时,它工作得很好,我的php安全模式也关闭了。请帮我解决这个问题。我的php代码是 <?php $output=exec("ffmpeg -f image2 -i /home/phedra/imgs/image/img%03d.png -r 12 -s 610x489 /home/phedra/imgs/video/out.avi", $out); echo $out; ec
<?php
$output=exec("ffmpeg -f image2 -i /home/phedra/imgs/image/img%03d.png -r 12 -s 610x489 /home/phedra/imgs/video/out.avi", $out);
echo $out;
echo $output;
?>
尝试给出ffmpeg应用程序所在的完整路径 e、 g 因此,您的函数可能如下所示:
$output=exec("/usr/bin/ffmpeg -f image2 -i /home/phedra/imgs/image/img%03d.png -r 12 -s 610x489 /home/phedra/imgs/video/out.avi", $out);
您必须检查“ffmpeg”的位置。请注意,如果您在windows上,则必须使用逗号。即:
$output=exec('"/usr/bin/ffmpeg" -f image2 -i /home/phedra/imgs/image/img%03d.png -r 12 -s 610x489 /home/phedra/imgs/video/out.avi', $out);
我遇到了这个问题,结果证明这是Apache对公共目录的权限 注意:我正在AWS上运行Ubuntu 14 安装FFmpeg后,我不得不将
/var/www/*
所有权更改为www-data
sudo chown -R www-data:root /var/www
(www-data是这里的重要部分)
然后我运行了下面的代码,当我通过URL(Apache)访问它时,它就可以工作了
/opt/ffmpeg/bin/ffmpeg
是运行我的ffmpeg的地方。你的可能是/usr/bin/ffmpeg
或其他东西。您可以通过在命令行中键入locate ffmpeg
并查看它提供的列表来找到它
输入文件是公用的.mp4文件,而输出的.mp4文件将位于同一位置
在命令行中运行此命令:php test.php
-works
从您的浏览器运行此命令:yourwebsite.com/test.php-works就像他在回答中提到的@Arfeen一样,您应该使用ffmpeg路径执行命令,但是,回答中的给定路径“/usr/bin/ffmpeg”并不总是相同的 首先使用以下命令定位ffmpeg:
which ffmpeg
我的情况是:
/usr/local/bin/ffmpeg
然后返回php代码,将命令中的“ffmpeg”替换为ffmpeg的路径(在我的例子中是/usr/local/bin/ffmpeg)。我的第一个猜测是存在权限问题。你能把你的代码放在这里吗?通过execYep执行命令的输出,exec命令的问题几乎总是权限问题。@rakeshjain我已经包含了我的php代码,我试图获得输出,但没有给出任何结果。检查我的代码我已经编辑过了。你在$out数组中没有得到任何东西吗?没有,它只是打印“数组”什么都没有else@Alifaizan因为我给你的只是一个例子,所以你是否设置了正确的路径。
su www data
或任何你的apache用户,并尝试从ssh运行ffmpeg,这可能是一个权限问题。老兄,你帮我省了很多麻烦:D在Ubuntu 18.04上对我有效。我尝试了不同的选择,但在这之前没有任何效果。
// test.php
$run = system("/opt/ffmpeg/bin/ffmpeg -i /var/www/html/input.mp4 -vf scale=640:480 /var/www/html/output.mp4 &");
if($run) {
echo "success";
} else {
echo "failed";
}
which ffmpeg