我正在创建一个只能工作10次的下载链接。所以我有2个选项。
我猜第二个选项使用较少的资源来不调用database.Now找到文件名的简单方法是什么。例如:
我的所有文件名都是独一无二的,例如 sadkjsah78876djhgsadj.jpg 。所以,当我更新计数时,它会像
sadkjsah78876djhgsadj-1.jpg
(or)
sadkjsah78876djhgsadj-8.jpg
那么如何在目录中找到基于sadkjsah78876djhgsadj的文件名。我正在考虑循环。但是当我将下载限制设置为100时,我不认为这是最好的方法。
答案 0 :(得分:1)
最佳选择是使用.htaccess
和mod_rewite
将某个目录的调用重写为PHP文件。例如任何对/downloads/FILEHASH.jpg
的调用都会被重写为/download.php?file=FILEHASH
然后download.php
将检查FILEHASH
是否与数据库中的行匹配,并且dl计数是否在x
之下,如果是,则会增加dl计数,设置响应代码为200
,内容类型为image/jpeg
并触发图像数据(存储在文件系统中或来自数据库中的BLOB)。
如果未找到或者dl计数超过x
,它会将响应代码设置为404
(或者更合适的话,如果您愿意)并且不返回任何内容或者可能是有用的消息。根据文件的大小,您可能还应该从数据库中删除该行,并在此时取消文件与文件系统的链接。
如果你使用MVC框架,这种事情真的很简单。
如果您提供的不仅仅是图像,请确保在添加时获取上传的mime类型,将其保存在数据库中并在下载时将其作为内容类型提供。