阻止访问PHP中的某些.mp3文件

时间:2011-10-31 16:51:27

标签: php mp3

我想只允许注册用户下载.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中快速读取文件吗?

由于 阿卡什

3 个答案:

答案 0 :(得分:1)

答案很简短,因为我已经不多了。 (稍后会提供更多信息)。这个答案也采用了一种替代方法来解决你想要做的事情。

如果可能,您应该使用具有专用ACL的系统,该系统支持存储在其上的所有文件。 例如,如果您使用Amazon S3,那么您可以为存储在存储桶中的每个对象提供自己的ACL,并且您还可以动态生成有效且仅签名为X分钟的链接。

根据您的情况,您可以做的是将您拥有的每个MP3文件存储在像Amazon S3这样的东西上(还有其他人在那里,所以不觉得你必须使用S3),然后当用户制作一个购买和交易确认后,您可以使用S3 API为图像生成链接。

这将是:

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

然后,您将获得一个可以提供给客户的URL。 或者,您可以要求Amazon生成在15分钟内过期的URL。

答案 1 :(得分:0)

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

或X-Sendfile apache模块。

答案 2 :(得分:0)

如果你的mp3在不同的服务器上,你可以用modsecdownload安装lighttpd,或者如果你只有一台机器的话,在另一个端口上运行lighttpd

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

因此,您只能为登录用户生成下载链接,该链接有效时间为几分钟,并且可以下载。我认为这样会更好,因为如果你有很多流量,它会比读取文件并将其发送给用户使用更少的内存。

希望这有帮助!