PHP执行不执行命令

时间:2013-09-04 07:48:16

标签: 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;
echo $output;
?>

4 个答案:

答案 0 :(得分:3)

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

e.g。

/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”的位置。

答案 1 :(得分:1)

我遇到了这个问题,结果证明这是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 - 有效 从您的浏览器运行:yourwebsite.com/test.php - 工作

答案 2 :(得分:0)

请注意,如果您使用的是Windows,则必须使用COMMAS。即:

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

答案 3 :(得分:0)

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

首先使用以下命令找到您的ffmpeg:

which ffmpeg

我的结果是:

  

的/ usr / local / bin中/ ffmpeg的

然后回到你的php代码,用ffmpeg的路径替换命令中的“ffmpeg”(在我的例子中是/ usr / local / bin / ffmpeg)。