如何在php上实现上传文件的文件夹结构的创建

时间:2014-01-03 07:45:42

标签: php file-upload uploading

假设我希望将上传的文件存储在子目录结构中,如下所示:

    /uploads/0/0/kitten.jpg;
    /uploads/0/1/kitten1.jpg;
    /uploads/1/10/pic.jpg;

这样每个子文件夹最多可以包含999个文件,即当/ uploads / 0 /达到其限制时,文件夹/ uploads / 1 /将自动创建,下一个文件将自动创建。每个文件夹还可以包含999个子文件夹。

问题是 - 我该怎么做?我主要关注的是如何确定新上传文件的放置位置。你能描述一下算法吗?我想不出比每次执行这些步骤更好的事情:

  1. 在/ 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);
        }
    
  2. 我们对这个子文件夹基本相同,等等(我想我可能想以某种方式在这里使用递归)。我在这里朝着正确的方向前进,还是我过度复杂?有一个更好的方法吗?请问一下。我只是php和编码的初学者。

1 个答案:

答案 0 :(得分:2)

一种方法是保持所有上传的运行总数,(原子地)为每次上传增加它。

然后可以像这样创建目录:

$dir = sprintf('/uploads/%d/%d', floor($total / 1000), $total % 1000);
if (!file_exists($dir)) {
    mkdir($dir, 0755, true);
}