Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何创建限制应用程序中用户存储的解决方案?_Php - Fatal编程技术网

Php 如何创建限制应用程序中用户存储的解决方案?

Php 如何创建限制应用程序中用户存储的解决方案?,php,Php,我想不出一个好的解决方案来限制用户可以通过文件访问的存储量 在应用程序中,允许用户上载有限数量的文件。限制基于总文件大小。即,可能允许用户在服务器上存储50 Mb 该数字存储在数据库中,以便可以轻松增加/减少 使用的语言是PHP,但我猜解决方案不依赖于脚本语言 如果问题不清楚,非常抱歉。我真的不知道除了实施一项战略之外还有什么需要 谢谢 一个简单的方法是将用户上传的文件名、日期和大小也存储在数据库中。然后,当上传超过其总存储空间时,您可以轻松拒绝该上传 这也使得显示以各种方式排序的文件列表变得容

我想不出一个好的解决方案来限制用户可以通过文件访问的存储量

在应用程序中,允许用户上载有限数量的文件。限制基于总文件大小。即,可能允许用户在服务器上存储50 Mb

该数字存储在数据库中,以便可以轻松增加/减少

使用的语言是PHP,但我猜解决方案不依赖于脚本语言

如果问题不清楚,非常抱歉。我真的不知道除了实施一项战略之外还有什么需要


谢谢

一个简单的方法是将用户上传的文件名、日期和大小也存储在数据库中。然后,当上传超过其总存储空间时,您可以轻松拒绝该上传

这也使得显示以各种方式排序的文件列表变得容易,允许接近其限制的用户选择要删除的一些文件


您甚至可以使用用户上载的文件的平均大小来警告他们即将用尽所有空间。

您可以使用一个脚本(类似)来迭代目录内容,计算文件大小,然后删除不适合的文件或拒绝新上载。但我认为最好在服务器上设置某种目录限制。不幸的是,我不是一个linux爱好者,所以我不知道该怎么做,但这可能会有所帮助。

跟踪使用了多少空间应该很简单-每次上传都可以将使用的空间存储在另一个表中。PHP
filesize()
函数将告诉您磁盘上文件的大小。使用
SUM()
SQL查询获取每个用户上载的所有文件的总大小,并将其与配额限制进行比较


棘手的一点是当你接近极限时——在上传之前你无法知道文件会有多大。所以你必须让用户上传一个文件,然后检查它的大小,看看它是否超过了配额。如果文件太大,请删除并让用户知道它们没有空间。

drewm的解决方案很好,我只想补充几句关于他提到的棘手部分的话

是的,在上传文件之前不可能预测文件大小,因为您无法在用户的文件上传页面上使用javascript检查文件大小。不过,您可以使用基于flash的文件上传程序(例如swfupload.org)来完成。通过使用它,您可以在开始上传之前检查文件大小,并根据您的上传限制进行检查。这样,您将为用户节省时间(无需上传文件以获得“限制超出错误”消息)


作为奖励,您还可以显示用户上传进度条。

别忘了操作系统解决方案。如果文件存储在特定于“用户”的目录中,则可以使用操作系统查找该目录中使用的磁盘。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";

好主意。可能会做那个的一个变体。我会用三个的变体。但这将是主要的解决方案。对于某些用户体验,您还可以使用一些javascript来计算要上传的文件大小,如果文件大小大于分配的数量,请在文件到达服务器之前拒绝它。您仍然需要服务器端代码,但您可能会限制您的用户在等待文件上传这么久后却被告知空间不足时的沮丧情绪。我发现,长期跟踪和操作系统以及数据库中的文件会导致问题。在某一点上,脚本会中途失败,最终在目录中出现文件,而数据库不会反映更改。或者更糟糕的是,您需要将文件移动到一个新的分区/目录结构,现在您必须更新数据库。我试图避免数据跟踪数据。操作系统永远是正确的——数据库可能是正确的。另一种方法是将文件作为“blob”保存在数据库中,这样操作系统就没有了播放空间。