【问题标题】:How to use system command in php?如何在php中使用系统命令?
【发布时间】:2019-06-11 18:59:23
【问题描述】:

我正在编写如下所示的 PHP 代码,其中 在 B 行将 mp4 转换为 mp3

我已添加 if block after system command 以便在转换完成后在网页上打印 Conversion Completed,但它似乎不起作用。

php代码:

if (isset($_POST['id']))
{
    for($i=0; $i <count($mp4_files); $i++) {
        if($i == $_POST['id']) {
            $f = $mp4_files[$i];
            $parts = pathinfo($f); 
            switch ($parts['extension'])
            {  
            case 'mp4' :
                $filePath = $src_dir . DS . $f;

                print_r($f);  // Line A        

                system('ffmpeg -i ' . $filePath . ' -map 0:2 -ac 1 ' . $destination_dir . DS . $parts['filename'] . '.mp3', $result);  // Line B

                if($result)
                {
                    echo "Conversion Completed";
                }

            }
        }
    }
} 

问题陈述:

我想知道我应该在上面的 PHP 代码中进行哪些更改,以便在转换完成后;在网页上,应该打印Conversion Completed

【问题讨论】:

  • 为什么要使用for 循环?您只需要$f = $mp4_files[$_POST['id']]
  • @Barmar 你是对的。我肯定会最小化我的代码。但是如果我想在转换完成后在网页上打印一些东西。我可以加if($result) { echo "Conversion Completed"; }
  • 查看人们发布的答案及其下方的 cmets。
  • 好的,我正在等待@AbraCadaver 的回复

标签: php ffmpeg


【解决方案1】:

您可以使用shell_exec 获取返回值,然后将其放入这样的 if 语句中

$output = shell_exec('ffmpeg -i ' . $filePath . ' -map 0:2 -ac 1 ' . $destination_dir . DS . $parts['filename'] . '.mp3');
if ($output) {
   echo "Conversion Completed!";
   // or redirect here
}

此外,请确保在您的输入暴露于 CLI 界面时对其进行清理。

【讨论】:

  • 注意:这个函数可以在发生错误或者程序没有输出时返回NULL。 无法使用此函数检测执行失败。需要访问程序退出代码时应使用 exec()。
  • 另外,如果$output = 处理输入时发现无效数据
  • $output 为空,然后else 将执行。 OP要求转换是否完成@AbraCadaver
  • 我不认为它会进入 if 块,因为我添加了这个 if(1) { echo "Conversion Completed"; } 并且它也没有进入其中。
  • 这意味着你的代码有一点问题。尝试一个新文件并将静态值放在我的示例中,然后查看。 @flash
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 2012-06-03
  • 2014-04-16
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
相关资源
最近更新 更多