大量文件的目录结构

时间:2012-03-22 12:07:14

标签: php filesystems directory

我制作了一个网站...我将用户上传的文件存储在不同的目录中
user_id = 1
所以
IMG / upload_docs / 1 / 1324026061_1.txt
IMG / upload_docs / 1 / 1324026056_1.txt

同样的方式
user_id = 2
所以
IMG / upload_docs / 2 / 1324026061_2.txt
IMG / upload_docs / 2 / 1324026056_2.txt
...
ñ

所以现在如果将来如果我将获得100000个用户,那么在我的upload_docs文件夹中,我将拥有100000个文件夹。
并且对用户上传没有限制,因此它可以是1个用户的1000个文件或10个文件的任意数量的文件...

这是正确的方法吗? 或者,如果没有,那么任何人都可以建议我如何将这些文件存储在这种结构中???

2 个答案:

答案 0 :(得分:0)

img/upload_docs/1/0/10000/1324026056_2.txt
img/upload_docs/9/7/97555/1324026056_2.txt
img/upload_docs/2/3/23/1324026056_2.txt

答案 1 :(得分:0)

我要做的是将图像命名为UUID并根据文件名创建子文件夹。您可以使用chunk_split轻松完成此操作。例如,如果您每4个字符创建一个文件夹,最终会得到如下结构:

img/upload_docs/1/1324/0260/61_1.txt 
img/upload_docs/1/1324/0260/56_1.txt 

通过存储图像名称1324026056_1.txt,您可以非常轻松地确定它所属的位置或使用chunk_split获取图片的位置。

这与git如何存储对象的方法类似。

作为代码,它可能看起来像这样。

// pass filename ('123456789.txt' from db)
function get_path_from_filename($filename) {
    $path = 'img/upload_docs';
    list($filename, $ext) = explode('.', $filename); //remove extension
    $folders = chunk_split($filename, 4, '/'); // becomes 1234/5678/9
    // now we store it here
    $newpath = $path.'/'.$folders.'/'.$ext;
    return $newpath;
}

现在,当您搜索文件以将其传递给用户时,请使用这些步骤重新创建文件的位置(基于文件夹中仍然存储为“123456789.txt”的文件)。 / p>

现在要传送或存储文件,请使用get_path_from_filename