2011-10-31 99 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

,所以你比你能器只为登录用户一个下载链接,该链接有效期为几分钟 - 小时,他们可以下载它。我认为这样比较好,因为如果你有很多流量,它会比读取文件并发送给用户更少的内存。

希望这会有所帮助!