2011-10-31 63 views
0

我想只允許註冊用戶下載.mp3文件。阻止訪問PHP中的某些.mp3文件

所以,我決定隱藏.MP3文件的實際位置,並允許使用下載http://example.com/donwload.php?mp3_name=1

文件donwload.php檢查天氣在用戶登錄,然後使用ReadFile的()讀取文件位置在未顯示給用戶的文件夾中。

這裏的問題是,訪問http://example.com/donwload.php?mp3_name=1爲500KB的MP3檔案,需要3秒鐘的加載(保存對話框出現)

是否有任何其他的方式來做到這一點或PHP快速讀取文件?

感謝 阿卡什

+0

請提供一些示例代碼,以便我們可以看到您的PHP腳本正在做什麼。 – Dancrumb

+0

你怎麼能確定延遲是由你的PHP腳本而不是你的瀏覽器/位置?您可能需要運行一些基準測試,然後才能100%確定應該責怪PHP。這可能是服務器硬件問題(無法使用)或本地軟件問題(無法爲其他用戶使用)。 –

+0

readfile()函數需要3秒才能完全讀取.mp3文件,並使用microtime()函數進行測試 – Akash

回答

1

真的簡短的回答,因爲我跑出來。 (稍後會提供更多信息)。這個答案也採取了一種交替的方式來處理你正在做的事情。

如果可能,您應該使用一個專用ACL支持所有存儲在其上的文件的系統。例如,如果您使用Amazon S3,那麼您可以爲存儲在存儲區內的每個對象提供自己的ACL,並且您還可以即時生成有效的鏈接,並且僅在X分鐘內簽名。

鑑於您的情況,您可以做的是存儲您擁有的任何類似Amazon S3的MP3文件(還有其他人,因此不覺得您必須使用S3),然後當用戶製作購買和交易確認後,您可以使用S3 API爲圖像生成鏈接。

這將是這樣的:

get_object_url('my-mp3s.com', 'albums/Foo/bar.mpg')

然後,您將獲得一個網址,你可以提供給客戶。 或者,您可以要求Amazon生成一個在15分鐘內過期的網址。

0

如果你有不同的服務器上的MP3,你可以在不同的端口上安裝有modsecdownload或運行lighttpd的lighttpd的,如果你只有一臺機器只

http://redmine.lighttpd.net/wiki/1/Docs:ModSecDownload

,所以你比你能器只爲登錄用戶一個下載鏈接,該鏈接有效期爲幾分鐘 - 小時,他們可以下載它。我認爲這樣比較好,因爲如果你有很多流量,它會比讀取文件併發送給用戶更少的內存。

希望這會有所幫助!