Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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_Image - Fatal编程技术网

Php 保存用户图像-达到最大文件夹限制

Php 保存用户图像-达到最大文件夹限制,php,image,Php,Image,我使用的是ext3,据我所知,允许的最大子目录数约为32000。目前,每个用户都有自己的目录,可以在文件系统上上载图像。这使得检索图像变得简单,并且易于访问。文件夹结构如下所示: ../images/<user id>/<image> ../images/<another user id>/<image> 。/图像// ../图像// 我不想承诺一个在可伸缩性方面注定失败的设计,特别是当32k用户上传图像时。虽然这可能永远无法实现,但我仍然认为

我使用的是ext3,据我所知,允许的最大子目录数约为32000。目前,每个用户都有自己的目录,可以在文件系统上上载图像。这使得检索图像变得简单,并且易于访问。文件夹结构如下所示:

../images/<user id>/<image>
../images/<another user id>/<image>
。/图像//
../图像//
我不想承诺一个在可伸缩性方面注定失败的设计,特别是当32k用户上传图像时。虽然这可能永远无法实现,但我仍然认为这是一种不好的做法


有人有办法避免这个问题吗?我宁愿不使用数据库,如果可能的原因是不必要的查询和速度

为上一个目录满时创建子目录

/images/<a>/<user id 1>/<image>
/images/<a>/<user id 2>/<image>
...
/images/<a>/<user id 32000>/<image>
/image/<b>/<user id 32001>/<image>
...
/images///
/图像///
...
/图像///
/形象///
...

如果我正确地理解了这一点,这个ir某种web应用程序,您可以使用一些抽象层来模拟文件夹结构,并将文件保存在一个目录中。将文件实名保存在数据库中,并使用一些唯一的名称保存上传的文件。然后列出数据库中的用户文件。

您可以有一个多级层次结构,其中每个级别都保证不会超过最大值

例如,如果您的用户ID是用正则表达式[A-Za-z0-9_234;]+定义的,那么对于任何给定的字符,您都有64个可能的选择(我添加了一个空格来说明ID较短时末尾的空格)。将两个字符放在一起,总共有64*64=4096个可能。您不能使用三个字符,因为这会超出您的限制。然后,使用此信息,您可以通过将ID分成两个字母的组来创建目录。示例:用户ID“miguel”和“miguel12345”将转到:

/images/mi/gu/el/<image>
/images/mi/gu/el/12/34/5/<image>
/images/mi/gu/el/
/图片/mi/gu/el/12/34/5/
请注意,如果id的长度为奇数,那么最后一个组件的长度可以是一个字符。这很好,因为空间是作为一个可能的字符计算的,所以您仍然在max子目录限制之内


祝你好运

此限制为每个目录。如果你的目录A最多有32k个子目录,那么子目录A/B可能有32k个条目,A/B/C也可能有32k个条目,A/C也可能有。虽然这会起作用,但我认为William Van Rensselaer是最实用、最简单的解决方案。您的两个答案都是在同一点上得出的,即强制每个目录的子目录不得超过32000个。作为旁注,用户ID是整数。谢谢,谢谢。这正是我要找的。如果我有一天发现目录
图片
需要拆分,那么我就不用担心网站了!