PHP执行程序未执行命令


PHP exec not executing command

我使用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;
echo $output;
?>

尝试给出ffmpeg应用程序所在的完整路径。

例如

/usr/bin/ffmpeg

所以你的函数可能看起来像:

$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"的位置。

我遇到了这个问题,结果发现这是Apache对公共目录的权限。

注意:我在AWS 上运行Ubuntu 14

安装FFmpeg后,我不得不将/var/www/*的所有权更改为www-data

sudo chown -R www-data:root /var/www

www-data是这里的重要部分)

然后我运行了以下代码,当我通过URL(Apache)访问它时,它就可以工作了

// 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";
}

/opt/ffmpeg/bin/ffmpeg是我的FFmpeg的运行源。你的可能是/usr/bin/ffmpeg或其他什么。您可以通过在命令行中键入locate ffmpeg并查看它提供的列表来定位它。

输入文件是一个公共.mp4文件,而output.mp4文件将转到同一位置。

在命令行中运行此命令:php test.php-works从您的浏览器运行此程序:yourwebsite.com/test.php-works

请注意,如果您在windows上,则必须使用COMMAS。I.E:

$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);

就像@Arfeen在他的回答中提到的那样,您应该使用ffmpeg的路径执行命令,但是,回答"/usr/bin/ffmpeg"中给定的路径并不总是相同的。

首先使用以下命令定位您的ffmpeg:

which ffmpeg

在我的案例中,结果是:

/usr/local/bin/ffmpeg

然后返回php代码,将命令中的"ffmpeg"替换为ffmpeg的路径(在我的情况下是/usr/local/bin/ffmpeg)。