我正在尝试使用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-";