【问题标题】:Unable to convert audio file format in php using shell commands无法使用 shell 命令在 php 中转换音频文件格式
【发布时间】:2016-07-24 00:51:58
【问题描述】:

我正在尝试使用 PHP 将上传的音频文件转换为 .mp3 格式。 我的服务器中启用了 ffmpeg。

我尝试执行 shell 命令,但它没有转换音频文件的文件格式。 exec()shell_exec() 均已启用。

<?php 
    $uploadpath = realpath('./') . '/musicfolder/';

    $filedata = $_FILES['filedata']['tmp_name'];
    $filename = $_POST['filename'];
    if ($filedata != '' && $filename != ''){


        list($name,$ext) = explode('.',$filename);
        $file_mp3=$name.".mp3";
        $file_wav=$name.".wav";
        shell_exec(' ffmpeg -i '.$filename.' -ac 1 -ab 16000 -ar 8000 '.$file_mp3.'');



        if($can_create){
            copy($filedata,$uploadpath.$filename);
            echo "-file_update_successful-";
        }

    }


?>

我不明白我在哪里犯了错误。我可以使用system() 来实现吗?

【问题讨论】:

  • ffmpeg 二进制路径是否正确?尝试记录 shell_exec 的输出以查看发生了什么。
  • 是的,路径是正确的@marcellorvalle

标签: php shell audio ffmpeg


【解决方案1】:

您应该通过escapeshellcmd 转义文件名,例如:

$file_mp3 = escapeshellcmd($name . ".mp3");
$file_wav = escapeshellcmd($name . ".wav");

而且你在这里搞砸了很多。 出于安全原因,您应首先检查文件是否使用is_uploaded_file 上传。

那么你应该尝试转换 $filedata 而不是 $filename

我不确定您要构建什么,但验证用户输入始终是一种好习惯。

使用您的脚本,可以将文件上传到与您预期不同的位置。

例如,可以发布一个二进制文件并发布一个像 '../../bin/admintool.exe'这样的文件名 这最终会像:

copy($filedata, '/musicfolder/../../bin/admintool.exe');
echo "-file_update_successful-";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多