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


Unable to convert audio file format in php using shell commands

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

我尝试执行shell命令,但它不会转换音频文件的文件格式。CCD_ 1和CCD_。

<?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,而不是$文件名

我不确定您试图构建什么,但验证用户输入始终是一种很好的做法。

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

例如,可以发布一个二进制文件并发布一个类似于'../..的文件名/bin/admintool.exe'这将像:

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