首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用shell命令在php中转换音频文件格式

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

Stack Overflow用户
提问于 2016-04-04 20:57:47
回答 1查看 143关注 0票数 1

我正在尝试转换上传的音频文件为.mp3格式使用PHP。在我的服务器上启用了ffmpeg。

我尝试执行shell命令,但它不能转换音频文件的文件格式。exec()shell_exec()均已启用。

代码语言:javascript
复制
<?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()实现这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2016-04-04 21:26:31

您应该通过escapeshellcmd转义文件名,如下所示:

代码语言:javascript
复制
$file_mp3 = escapeshellcmd($name . ".mp3");
$file_wav = escapeshellcmd($name . ".wav");

你把这里搞得乱七八糟。出于安全原因,您应该首先检查文件是否使用is_uploaded_file上传。

然后,您应该尝试转换$filedata而不是$filename

我不确定您正在尝试构建什么,但验证用户输入总是一个好的实践。

使用您的脚本,可以将文件上传到与预期位置不同的位置。

例如,您可以发布一个二进制文件,然后发布一个类似于'../../bin/admintool.exe‘的文件名,结果如下所示:

代码语言:javascript
复制
copy($filedata, '/musicfolder/../../bin/admintool.exe');
echo "-file_update_successful-";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36403355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档