我正在尝试使用PHP将上传的音频文件转换为.mp3格式。 我的服务器启用了ffmpeg。
我尝试执行shell命令,但它不转换音频文件的文件格式。 <{1}}和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-";
}
}
?>
实现此目的吗?
答案 0 :(得分: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-";