假设我希望将上传的文件存储在子目录结构中,如下所示:
/uploads/0/0/kitten.jpg;
/uploads/0/1/kitten1.jpg;
/uploads/1/10/pic.jpg;
这样每个子文件夹最多可以包含999个文件,即当/ uploads / 0 /达到其限制时,文件夹/ uploads / 1 /将自动创建,下一个文件将自动创建。每个文件夹还可以包含999个子文件夹。
问题是 - 我该怎么做?我主要关注的是如何确定新上传文件的放置位置。你能描述一下算法吗?我想不出比每次执行这些步骤更好的事情:
在/ uploads /中查找最新创建的文件夹,如果它是空的 - 创建一个,如下所示:
$contents = $scandir('/uploads');
$dirs = array();
foreach ($contents as $path) {
if (is_dir($path)) {
$dirs[] = $path;
}
}
if (empty($dirs)) {
//create new dir and save file there subsequently
$saveTo = $parentDir . DIRECTORY_SEPARATOR . "1" . DIRECTORY_SEPARATOR . "1";
mkdir($saveTo, 0777, true);
} else {
$last = array_pop($dirs);
}
答案 0 :(得分:2)
一种方法是保持所有上传的运行总数,(原子地)为每次上传增加它。
然后可以像这样创建目录:
$dir = sprintf('/uploads/%d/%d', floor($total / 1000), $total % 1000);
if (!file_exists($dir)) {
mkdir($dir, 0755, true);
}