Php 每个用户只有3张图片,我需要麻烦创建一个聪明的目录结构吗?

Php 每个用户只有3张图片,我需要麻烦创建一个聪明的目录结构吗?,php,image,storage,directory-structure,Php,Image,Storage,Directory Structure,我读过几个关于在数据库中存储图像而不是在服务器上存储文件夹的问题,我决定使用文件夹,但我想知道我需要多聪明。我发现了很多关于存储数千张图像的问题,但我只想每个用户存储三张图像(实际上是三种风格的一张图像) 在本文中,提问者首先提出了一种基于用户名的目录结构(在他和我的例子中,用户名都是电子邮件地址)。他的目录看起来像: /images/domain.com/user/imagename.png 我可以用这个吗?我不是这方面的老手,所以我想知道在安全性或性能方面是否有什么我没有想到的,我应该关心

我读过几个关于在数据库中存储图像而不是在服务器上存储文件夹的问题,我决定使用文件夹,但我想知道我需要多聪明。我发现了很多关于存储数千张图像的问题,但我只想每个用户存储三张图像(实际上是三种风格的一张图像)

在本文中,提问者首先提出了一种基于用户名的目录结构(在他和我的例子中,用户名都是电子邮件地址)。他的目录看起来像:

/images/domain.com/user/imagename.png
我可以用这个吗?我不是这方面的老手,所以我想知道在安全性或性能方面是否有什么我没有想到的,我应该关心的。我希望将所有图像都保存在webroot之外的文件夹中,因此我认为用户访问无权查看的文件不会有问题,但是,您是否还有其他原因需要对文件进行哈希处理并使用它生成目录结构,或者使用其他类型的伪随机生成的GobbleDeBook而不是用户名的一部分来生成目录结构


编辑:我使用的是php,如果有什么不同的话,这些照片只是个人资料照片。在搜索其他用户时,它们基本上对任何用户都可见,因此在安全方面,我只是不希望人们能够热链接到用户的照片,或者通过键入指向照片的url直接导航到照片。也就是说,除非,正如我所说的,我还应该考虑其他安全问题,但不知道要考虑这些问题。

我不明白为什么散列文件会有用,除非你希望它们中有很多是相同的;这样可以节省大量存储空间

如果用户能够编辑他们的用户名(你无法预知未来!),那么我不会在结构中使用它。使用数据库主键或永远不会更改的内容

如果您确实想要多一点结构,您仍然可以在结构级别上拆分id,例如:id为1234的用户将在以下位置存储图像:

/images/domain.com/12/34/imagename.png

这至少意味着您在查看列表时没有超过100个目录…

在大多数情况下,如果您说将图像存储在数据库中,数据库中存储的实际内容是图像的文件名或文件路径,而不是实际图像

如果您已经理解了这些差异,并且确信要使用文件夹结构,那么为文件夹结构创建哈希的主要原因是防止有人将目录更改为以下内容进行未经授权的访问:

/images/domain.com/itsmequinn/imagename.png
以及访问其他用户的文件

就我个人而言,我不建议为每个用户结构设置一个文件夹,因为我认为这是一个混乱的解决方案。我不会详细说明这一点,但您可以在这里检查前面的几个问题:


我想问一下,如果用户的电子邮件地址是主键,您的建议是什么,但后来发现并意识到,也许我一开始就不应该将其用作主键。吸取的教训