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

阻止对PHP中某些.mp3文件的访问,php,mp3,Php,Mp3,我只允许注册用户下载.mp3文件 因此,我决定隐藏.mp3文件的实际位置,并允许使用 文件donwload.php检查用户是否登录,然后使用readfile()读取未显示给用户的文件夹中的文件位置 这里的问题是,访问500kb的.mp3文件需要3秒钟才能加载(显示“保存”对话框) 有没有其他方法可以在PHP中快速读取文件 谢谢 阿卡什非常简短的回答,因为我快用完了。(稍后将提供更多信息)。这个答案对你想做的事情也采取了另一种方式 如果可能,您应该使用具有专用ACL的系统来支持存储在其中的所有文件

我只允许注册用户下载.mp3文件

因此,我决定隐藏.mp3文件的实际位置,并允许使用

文件donwload.php检查用户是否登录,然后使用readfile()读取未显示给用户的文件夹中的文件位置

这里的问题是,访问500kb的.mp3文件需要3秒钟才能加载(显示“保存”对话框)

有没有其他方法可以在PHP中快速读取文件

谢谢
阿卡什

非常简短的回答,因为我快用完了。(稍后将提供更多信息)。这个答案对你想做的事情也采取了另一种方式

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

根据您的场景,您可以将所有的MP3文件存储在类似Amazon S3的东西上(还有其他文件,因此您不必使用S3),然后当用户进行购买并确认交易时,您可以使用S3 API为图像生成链接

可能是这样的:

get\u object\u url('my-mp3s.com','albums/Foo/bar.mpg')

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

您可以使用file\u get\u内容而不是readfile()


或者X-Sendfile apache模块。

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

因此,您可以只为登录用户生成一个下载链接,该链接的有效期为数分钟-数小时,用户可以下载该链接。我认为这是更好的,因为它将使用更少的内存比读取文件并发送给用户,如果你有很多流量


希望这有帮助

请提供一些示例代码,以便我们可以看到您的PHP脚本正在做什么。您如何确保延迟是由您的PHP脚本而不是您的浏览器/位置造成的?您可能需要运行一些基准测试,然后才能100%确定PHP是罪魁祸首。可能是服务器硬件问题(您无法控制)或本地软件问题(其他用户无法控制)。readfile()函数需要3秒钟才能完全读取.mp3文件,并使用microtime()函数进行测试