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つの異なったアプローチを試してみました
ファイルのサイズはどれくらいですか? PHPが単純にメモリ不足になる可能性はありますか?あなたは、ファイルを '$ this-> data'と' base64_decode'が保持する一時的な戻り値の中で何回かメモリにロードしています。データをバッファリングする代わりに実際にストリーミングする必要があります。また、フォームデータを含むPOSTではなく、マルチパートファイルのアップロードを使用することをお勧めします。 –
ファイルは約1MBで、Red5メディアサーバーを使用してサイトからストリーミングしようとしましたが、動作させることができませんでした。マルチパートフォームが機能するかもしれませんが、ファイルがロードされたときにDBエントリを作成する必要があります。あなたが提案できるリソースはどれですか? – 8vius
ファイルに書き込んでそのファイルへのリンクをDBに格納するだけであれば、マルチパートファイルのアップロードを使用している限り、メモリの必要性について心配する必要はありません。あなたは間違いなくファイルアップロードのためにbase64を使いたくないのです。特に、PHPではそうではありません。サーバーのメモリにファイル全体をロードする必要があるからです。潜在的に大きいファイルに対して 'file_get_contents'のような関数を使うのを避けてください(> 500KBと言う)。 PHPはひどく非効率的で、1.3MBの "文字列"上の単純な 'base64_decode'は16MBのメモリを使うことができます。 –