2016-04-04 10 views
1

アップロードされたオーディオファイルをPHPを使用して.mp3形式に変換しようとしています。 私のサーバーでffmpegが有効になっています。シェルコマンドを使用してPHPでオーディオファイル形式を変換できません

シェルコマンドを実行しようとしましたが、オーディオファイルのファイル形式を変換しません。 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()を使用してこれを達成できますか?

+0

:のように例えば1のバイナリファイルを投稿できるとのようなファイル名を投稿

「../../bin/admintool.exe」 これは終わるだろう? shell_execの出力を記録して、何が起きているのかを確認してください。 – marcellorvalle

+0

はいパスは正しい@marcellorvalle –

答えて

1

はあなたのようなescapeshellcmdを経由してファイル名をエスケープする必要があります

$file_mp3 = escapeshellcmd($name . ".mp3"); 
$file_wav = escapeshellcmd($name . ".wav"); 

そして、あなたはここで多くのことをめちゃくちゃにされています。 セキュリティ上の理由から、ファイルがis_uploaded_fileでアップロードされたかどうか最初に確認する必要があります。

次に、あなたが私はあなたが構築しようとしているかわからない$ファイル名

の代わりに$ filedataにを変換しようとする必要がありますが、それは常にユーザー入力を検証することをお勧めします。

スクリプトを使用すると、期待どおりの場所にファイルをアップロードすることができます。 ffmpegのバイナリパスが正しい

copy($filedata, '/musicfolder/../../bin/admintool.exe'); 
echo "-file_update_successful-"; 
関連する問題