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

时间:2016-04-04 12:57:47

标签: php shell audio ffmpeg

我正在尝试使用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-"; } } ?> 实现此目的吗?

1 个答案:

答案 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-";