我正在尝试转换上传的音频文件为.mp3格式使用PHP。在我的服务器上启用了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()实现这一点吗?
发布于 2016-04-04 21:26:31
您应该通过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-";https://stackoverflow.com/questions/36403355
复制相似问题