[英]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.