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

如何在php上实现上传文件文件夹结构的创建,php,file-upload,uploading,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个子文件夹 问题是-我该怎么做?我主要关心的是如何确定新上传的文件放在哪里。你能描述一下算法吗

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

    /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);
        }
    
  • 我们对这个子文件夹做的基本相同,等等(我想我可能想在这里使用递归)。我是朝着正确的方向前进,还是我把事情搞得太复杂了?有更好的方法吗?什么都行。我只是php和编码的初学者
    一种方法是保持所有上传的运行总数,(原子地)增加每次上传的数量

    然后可以按如下方式创建目录:

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

    您介意使用日期(如2013/4/5)作为子文件夹吗?以及如何分离在同一天上载的文件?可能有数千个。我需要将每个文件存储在单独的文件夹中。这看起来是一个非常聪明和优雅的解决方案,我给你这个,先生,但是我在哪里存储所有上传的总数?@dKab有几个选项;数据库是一种方式,或者是一个用建议锁定保护的简单文件,请参阅。非常感谢。我试试看。