如何在服务器的文件系统中正确存储图像(带有数字名称)

时间:2012-05-17 14:31:29

标签: php filesystems

我在数据库中有很多记录,每条记录都有一张图片,我对如何存储图片感到很困惑。

我希望访问路由类似于/img/record-id.jpg(即/img/15178.jpg)。

好的,将所有图像存储在/ img /中并不是一件好事,因为会有很多。

this question中建议反转图片名称,因此上面的示例将存储在/img/78/51/15178.jpg下。该建议不会提供有关其他方案的进一步信息(对我来说并不明显)。如果id是5,15,128,1517这样的低数字会发生什么(这是在答案的最后评论中提出的)?

暂且不说,让我们记住我希望路径为/img/15178.jpg。我使用Apache重定向请求,但为此,我必须为不同的id号键入至少3个或更多规则:

  • ^/img/(\d)(\.jpg)$ / img / $ 1 $ 2
  • ^/img/(\d\d)(\.jpg)$ / img / $ 1 / $ 1 $ 2
  • ^/img/(\d\d)(\d\d)(\.jpg)$ / img / $ 1 / $ 2 / $ 3
  • 等等?

这似乎不是一个很好的解决方案,虽然它可以正常工作。

我可以想到其他选项:获取图像的MD5,将其存储在各自的记录中,将请求重定向到PHP脚本并让它处理输出。

脚本将在MD5中查找数据库中的id,从哈希中构建实际路由并输出图像。这个解决方案比较简洁,但它涉及数据库和PHP输出图像,听起来有点太多了。

我真的不知道该怎么做。介意给我一些建议吗?

1 个答案:

答案 0 :(得分:2)

你已经写完了答案!专业人士使用它完全像你(或链接问题中的人)说:构建一个适合您需求的深层目录结构。我用1600万张照片完成了这项工作,效果很好。

我是这样做的:

/ firstCharacter / secondCharacter /...

短名称的文件,如5.jpg,将在/5/5.jpg

编辑:为了保持性能最高,我完全反对任何进一步的php动作,比如salt,md5等。保持简单直接。