我无法找到一个很好的解决方案来限制用户可以使用他的文件访问的存储量。
在应用程序中,允许用户上传限制数量的文件。限制基于总文件大小。即可能允许用户在服务器上存储50 Mb。
此号码存储在数据库中,以便轻松增加/减少。
使用的语言是PHP,但我想解决方案不依赖于脚本语言。
非常抱歉,如果问题不清楚。我真的不知道要求的是什么,而不是实施的策略。
谢谢!
答案 0 :(得分:5)
跟踪已使用的空间应该很简单 - 每次上传都可以存储另一个表中使用的空间。 PHP filesize()
函数将告诉您磁盘上文件的大小。使用SUM()
SQL查询获取每个用户上传的所有文件的总大小,并将其与配额限制进行比较。
棘手的一点是当你接近极限时 - 你无法知道文件在上传之前会有多大。因此,您必须让用户上传文件,然后检查其大小,看看它是否超过配额。如果文件太大,请删除并让用户知道它们没有空间。
答案 1 :(得分:2)
一种简单的方法是将用户上传的文件名,日期和大小也存储在数据库中。然后,当超过总存储量时,您可以轻松拒绝上传。
这也可以很容易地显示以各种方式排序的文件列表,允许接近其限制的用户选择一些文件进行删除。
您甚至可以使用用户上传的文件的平均大小来警告他们,当他们接近耗尽所有空间时。
答案 2 :(得分:1)
您可以使用脚本(类似that)来遍历目录内容,计算文件大小,然后删除不适合或拒绝新上载的文件。但我认为最好通过服务器上的某种目录限制来完成。不幸的是,我不是一个Linux人,所以我不确切知道如何做到这一点,但这post可能会有所帮助。
答案 3 :(得分:0)
drewm的解决方案很好,我只想添加一些关于他提到的棘手部分的话。
是的,在上传文件之前无法预测文件大小,因为您无法在用户的文件上传页面上使用javascript检查文件大小。但是你可以使用基于flash的文件上传器(例如swfupload.org)来完成它。通过使用它,您可以在上载开始之前检查文件大小,并根据您的上传限制进行检查。这样您将为用户节省时间(无需上传文件以获得“超出限制错误”消息)。
作为奖励,您还可以显示用户上传进度条。
答案 4 :(得分:0)
不要忘记操作系统解决方案。如果文件存储在“用户”特定目录中,则可以使用操作系统查找该目录中使用的磁盘间隔。 Linux解决方案会是这样的:
$dirSize = explode("\t", `du -ks $userDir`); // Will return an array of size, dirName
if ($dirSize[0] > MAX_DIR_LIMIT) print "USER IS OVER QUOTA";