PHP我应该将图像路径存储在数据库中吗?

Dre*_*rew 4 php mysql database store image

我将有一个包含许多公司的网站,每个公司都可以上传他们的徽标.为每个注册的公司创建一个文件夹是一个好主意,所以它将是
公司/ user1/logo.jpgcompanies/user2/logo.jpg 并且只是将每个人存储在一个文件夹中,这样我就不会需要路径来引用图像?

或者我应该将它们存储在像company_logos/gaegha724252.jpg这样的文件夹中,它们都是随机文件名,路径是否会存储在与该公司相关的数据库中?

有哪些优点和缺点?

谢谢!

ash*_*exm 11

使用文件夹进行组织

优点:对于在后端摆弄系统的人来说,它们在逻辑上是清晰的 - 这就是真的.

缺点:当您删除公司等时,"更难"清理并且您必须确保没有任何目录名称重叠,通常更多的工作从开始.

在一个文件夹中使用图像

优点从技术上讲,清理起来要容易一些,而不是那么多工作.

缺点您必须至少编写一个非常基本的碰撞检测算法和一个非常基本的"随机名称生成器".

使用数据库存储图像

警告:在这个论点中已经失去了许多生命!

优点:参照完整性,备份/恢复更简单,分类

缺点:充满陷阱,可能更慢,更先进的存储/检索技术,潜在的性能问题和网络请求的增加.此外,大多数廉价的托管服务提供商的数据库太可怕了,这是一个好主意.

强烈建议只使用散列文件名并将其(文件名)存储在数据库中,然后将图像存储在磁盘上的文件夹(或许多文件夹)中.从长远来看,这应该会更容易,并且总体上表现更好而不会变得太复杂.


dma*_*a_k 6

我会更进一步:在将每个文件存储到文件系统之前计算每个文件的MD5总和.您可以使用前两个字符作为第一级的目录名,接下来的两个字符作为第二级的目录:

vv 1st level
61f57fe906dffc16597b7e461e5fce6d.jpg
  ^^ 2nd level
Run Code Online (Sandbox Code Playgroud)

由于散列算法具有相同的分布,这将在文件夹之间平均分配您的文件(这个想法来自Squid如何组织它的文件缓存).服务器应该像这样返回URL(例如,没有关于目录的概念):

http://server.com/images/61f57fe906dffc16597b7e461e5fce6d.jpg

你可以申请mod_rewrite实际重写这个网址:

/storage/images/61/f5/7fe906dffc16597b7e461e5fce6d.jpg

这也将增加一定程度的匿名性并隐藏真实的图像名称.此外,如果您的客户打算上传相同的内容,它将最终在同一个文件中,这将节省您的磁盘空间.从一个客户端删除文件时要小心:它也可能被其他人使用!