文件上传 - 目录结构的最佳实践


File Uploads - best practise for directory structure?

上下文:

刚刚编写了一个PHP文件上传处理程序,它将任何传入文件保存到我网站的上传目录中。上传目录可以通过 Web 公开访问,目前每个文件在使用数据库生成的唯一 ID 重命名后直接转储到其中。处理程序将允许除JS和PHP之外的任何文件类型,而不仅仅是图像。文件数量最终可能会达到数千个,但需要几年时间才能实现。

我的问题:

将所有上传的文件放在服务器上的同一目录中是一个好主意还是坏主意,如果不是,请解释原因,以及更好的方法是什么?

我注意到wordpress将它们存储在例如以日期命名的目录中。

我能看到的唯一真正的缺点是,一旦目录中有几千个文件,目录中的ls可能是资源密集型的。或者对一个目录中的文件数量或一个目录的总大小(运行 Linux)是否有限制?

关于安全性的稍微先发制人的说明:

上传

处理程序对任何人是安全的,但登录管理员级别的用户上传文件,它也不会保存 PHP 或 JS 文件(至少在我可以使用 $_FILES 数组中的 type 属性可靠地测试它们的情况下),因为这些文件可能由服务器执行。我计划实施的另一个保护措施是一个.htaccess文件,它阻止对某些文件类型的请求,以防万一。也欢迎有关这方面的任何说明,但这不是这个问题的一部分。

组织文件方面没有固定的标准。但是,将所有文件放在一个目录中不是一个好主意。它最终将开始影响系统的性能,尤其是在索引方面。

您可以执行WordPress所做的操作,按年,月和日期进行组织。您也可以按文件类型(扩展名)进行组织,因此有一个PDF目录,一个ZIP目录等,其中可能有年/月/日目录以供进一步分类。

如果是我,我会按天或某个时间值分解它。您正在谈论(可能)数千个未知大小的文件。您最终将不得不围绕此构建存储,并且可能希望将部分移动到其他卷、存档等。

我还会确保每个文件都是 chmod -x 并给出一些中性后缀。

编辑:我也同意@NADH关于索引的问题。当文件夹中有数千个文件时,许多操作系统会变得挑剔。