簡體   English   中英

禁止訪問PHP中的某些.mp3文件

[英]Block access to certain .mp3 files in PHP

我只允許注冊用戶下載.mp3文件。

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

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

這里的問題是,訪問http://example.com/donwload.php?mp3_name=1以獲得500kb的.mp3文件需要3秒鍾的加載時間(出現保存對話框)

還有其他方法可以做到這一點,也可以在PHP中快速讀取文件嗎?

謝謝阿卡什

真的很短,因為我快要精疲力盡了。 (稍后將提供更多信息)。 該答案還對您嘗試做的事情采取了替代方法。

如果可能,您應該使用具有專用ACL的系統來備份存儲在其上的所有文件。 例如,如果您使用Amazon S3,則可以為存儲在存儲桶中的每個對象提供自己的ACL,並且還可以動態生成有效的鏈接並僅對其簽名X分鍾。

根據您的情況,您可以做的是將擁有的每個MP3文件存儲在諸如Amazon S3之類的文件上(那里還有其他文件,因此您不必使用S3),然后當用戶進行購買時,交易被確認后,您可以使用S3 API生成圖像的鏈接。

就像這樣:

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

然后,您將獲得可以提供給客戶的URL。 或者,您可以要求亞馬遜生成一個在15分鍾內過期的URL。

您可以使用file_get_contents代替readfile() http://php.net/manual/en/function.file-get-contents.php

或X-Sendfile apache模塊。

如果您的mp3在其他服務器上,則可以使用modsecdownload安裝lighttpd,或者,如果只有一台機器,則可以在其他端口上運行lighttpd

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

因此,您將只能為登錄用戶生成一個下載鏈接,該鏈接有效期為幾分鍾-幾個小時,他們可以下載該鏈接。 我認為這樣做會更好,因為如果您的流量很大,它將比讀取文件並將其發送給用戶使用的內存更少。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM