0
我試圖將音頻文件保存在我的服務器上。我以PCM格式將音頻錄製在iPhone上,併發送編碼爲Base64字符串的數據。我已經試過3種不同的方法來保存文件,所有3創建一個空的wav文件: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();
該文件有多大?難道是PHP只是內存不足?您將文件加載到內存中多次:在'$ this-> data'和'base64_decode'所保存的臨時返回值中。你應該真的嘗試流數據而不是緩衝它。使用多部分文件上傳而不是帶有表單數據的POST也許是明智的。 – 2012-04-24 21:49:22
該文件大約1MB,我試圖使用Red5媒體服務器從網站流式傳輸,無法使其工作。多部分表單可能工作,但我也必須在加載文件時創建一個數據庫條目。你可以建議任何資源? – 8vius 2012-04-24 21:56:21
如果您只是寫入文件並在數據庫中存儲指向該文件的鏈接,則只要您使用多部分文件上傳,就不必擔心內存要求。你絕對不希望使用base64進行文件上傳,特別是不使用PHP,因爲這意味着你必須將整個文件加載到服務器的內存中。避免在可能很大的文件上使用像'file_get_contents'這樣的函數(假設大於500KB)。 PHP的效率非常低,一個簡單的'base64_decode'在1.3MB的「字符串」上可以佔用16MB的內存。 – 2012-04-24 22:01:31