2009-10-04 118 views
10

以同樣的方式可以用php提供圖像,用於CAPTACHAS等,是否可以對音頻文件進行相同處理?我可以用PHP提供MP3文件嗎?

我已經試過這

<?php 

$track = "sometrack.mp3"; 

if(file_exists($track)) { 
    header('Content-type: audio/mpeg'); 
    header('Content-length: ' . filesize($track)); 
    header('Content-Disposition: filename="sometrack.mp3"'); 
    header('X-Pad: avoid browser bug'); 
    header('Cache-Control: no-cache'); 
    print file_get_contents($track); 
} else { 
    echo "no file"; 
} 

我使用的是Safari瀏覽器,它可以播放MP3文件。它正在將Safari踢入正確的模式,我將Quicktime控件拖了幾秒鐘,然後是「無視頻」。

我試圖保護文件免受未經授權的下載,如果你想知道爲什麼我想這樣做。

+0

你應該能夠 - 不知道爲什麼這不起作用,但你是在正確的路線。 從您訪問文件的url上的命令行嘗試wget/curl,並檢查它是否按預期工作。 – 2009-10-04 15:29:54

回答

14

你的內容配置應該是:

header('Content-Disposition: attachment; filename="sometrack.mp3"'); 

不知道如果是這樣的問題,但。我也建議使用readfile輸出文件:

readfile($rSong); 

而且,它不能傷害到使用一個詳盡的Content-Type頭,並設置內容傳輸編碼:

header("Content-Transfer-Encoding: binary"); 
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3"); 
+1

這些額外的標題使所有的區別!謝謝。雖然我現在刪除了「附件」,因爲我想在瀏覽器中播放曲目,但稍後當人們下載曲目時需要使用它。偉大的建議,謝謝。 – gargantuan 2009-10-04 15:44:04

+0

請注意,'XSendfile'(在Apacha和nginx otoh上)可以嚴重減少服務器/ php的負載,並仍然使用文檔根目錄之外的文檔。 – Wrikken 2012-01-26 22:41:10

1

嘗試使用This Class它支持下載簡歷和速度限制相信我你需要它作爲一個MP3下載網站的所有者

相關問題