繁体   English   中英

无法使用shell命令在php中转换音频文件格式

[英]Unable to convert audio file format in php using shell commands

我正在尝试使用 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()来实现吗?

您应该通过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-";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM