2015-05-22 28 views
4

我正在创建一个仅工作10次的下载链接。所以我有2个选项。如何创建一个(可配置)数量的临时下载链接

  • 下载文件和更新其计数数据库和删除文件 时数为10
  • 或下载文件和重命名为filename-1, 文件名,2名....... -10 ..并且最后在它到达 filename-10时删除它。

我想第二个选项使用较少的资源,不是要求database.Now什么是查找文件name.For例如最简单的方法:

我所有的文件名都是独一无二的一样sadkjsah78876djhgsadj.jpg。所以当我更新计数就会像

sadkjsah78876djhgsadj-1.jpg 
(or) 
sadkjsah78876djhgsadj-8.jpg 

因此,如何根据在循环的directory.I正在考虑sadkjsah78876djhgsadj要查找的文件名。但我不认为那是最好的方法,当我设置下载限制到100 。

+3

我会明确地去与数据库选项。在如此多的层面上更好。 –

+0

,但会有数百万的下载文件将被生成......并且我还必须创建cron作业来删除这些列表。 – Vishnu

+0

更新数百万行数据库比动态重命名数百万个文件要好得多。这就是数据库的用途。如果你正确设置它,不会有负载问题。 –

回答

1

最佳选择是使用.htaccessmod_rewite将对某个目录的调用重写为PHP文件。例如到/downloads/FILEHASH.jpg任何调用就会改写为/download.php?file=FILEHASH

然后download.php将检查FILEHASH在DB相匹配的行和该DL计数x下,如果是的话,它会递增DL计数,设定的响应代码200,内容类型为image/jpeg并发出图像数据(或者存储在文件系统中或者从数据库中的BLOB中)。

如果没有找到,或者如果在DL计数结束x,它会设置响应代码为404(或东西,如果你喜欢更合适),要么返回任何结果或者一个有用的消息。根据文件的大小,您应该也可以从数据库中删除该行,并在此时将文件与文件系统断开连接。

如果您使用MVC框架,这种事情非常简单。

如果您的服务不仅仅是图片,请确保在添加时获取上传的MIME类型,将其保存在数据库中,并在下载时作为内容类型提供。

相关问题