我制作了一个网站...我将用户上传的文件存储在不同的目录中
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个文件的任意数量的文件...
这是正确的方法吗?
或者,如果没有,那么任何人都可以建议我如何将这些文件存储在这种结构中???
答案 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
。