2012-04-24 8 views
0

私のサーバーにオーディオファイルを保存しようとしています。私はPCM形式でiPhoneにオーディオを録音し、Base64文字列としてエンコードされたデータを送信します。PHP - オーディオデータをファイルに書き込むと空のファイルになります

試み1:

$file = fopen($filePath, 'w'); 
fwrite($file, base64_decode($this->data['Voicenote']['audio_data'])); 
fclose($file); 

試み2:

file_put_contents($filePath, base64_decode($this->data['Voicenote']['audio_data'])); 

試み3:

$audioFile = new File($filePath, true); 
$audioFile->write(base64_decode($this->data['Voicenote']['audio_data'])); 
$audioFile->close(); 
私はすべての3が空wavファイルを作成し、ファイルを保存するために3つの異なったアプローチを試してみました
+1

ファイルのサイズはどれくらいですか? PHPが単純にメモリ不足になる可能性はありますか?あなたは、ファイルを '$ this-> data'と' base64_decode'が保持する一時的な戻り値の中で何回かメモリにロードしています。データをバッファリングする代わりに実際にストリーミングする必要があります。また、フォームデータを含むPOSTではなく、マルチパートファイルのアップロードを使用することをお勧めします。 –

+0

ファイルは約1MBで、Red5メディアサーバーを使用してサイトからストリーミングしようとしましたが、動作させることができませんでした。マルチパートフォームが機能するかもしれませんが、ファイルがロードされたときにDBエントリを作成する必要があります。あなたが提案できるリソースはどれですか? – 8vius

+0

ファイルに書き込んでそのファイルへのリンクをDBに格納するだけであれば、マルチパートファイルのアップロードを使用している限り、メモリの必要性について心配する必要はありません。あなたは間違いなくファイルアップロードのためにbase64を使いたくないのです。特に、PHPではそうではありません。サーバーのメモリにファイル全体をロードする必要があるからです。潜在的に大きいファイルに対して 'file_get_contents'のような関数を使うのを避けてください(> 500KBと言う)。 PHPはひどく非効率的で、1.3MBの "文字列"上の単純な 'base64_decode'は16MBのメモリを使うことができます。 –

答えて

0

私はthis question

のコードに従ってこの問題を解決することができました

そして、私のPHPコードでは、私は次のようでした:

これを行う
move_uploaded_file($_FILES['audio_file']['tmp_name'], $filePath); 

私が正しく、サーバー上の私のオーディオファイルを保存することができました。

関連する問題