Php 如何在服务器';s文件系统

Php 如何在服务器';s文件系统,php,filesystems,Php,Filesystems,我在数据库中有很多记录,每个记录都有一个图像,我很困惑如何存储图像 我希望访问路径类似于/img/record-id.jpg(即/img/15178.jpg) 好的,将所有图像存储在/img/中不是一件好事,因为会有很多 在中,建议反转图像的名称,因此上面的示例将存储在/img/78/51/15178.jpg下。这个建议不会提供更多关于其他场景的信息(对我来说也不明显)。如果id是一个很低的数字,如5、15、128、1517,会发生什么情况(在最后的评论中询问答案) 撇开这一点不谈,让我们记住我

我在数据库中有很多记录,每个记录都有一个图像,我很困惑如何存储图像

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


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

在中,建议反转图像的名称,因此上面的示例将存储在
/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/$2
  • ^/img/(\d\d)(\d\d)(\.jpg)$
    /img/$1/$2/$3
  • 等等
这似乎不是一个好的解决方案,尽管它可以很好地工作

我可以考虑另一种选择:获取图像的MD5,将其存储在相应的记录中,将请求重定向到PHP脚本,并让它处理输出

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


我真的不知道在这里该怎么办。介意给我一些建议吗?

你已经写出了完美的答案!专业人士使用它的方式与您(或链接问题中的人)所说的完全一样:构建适合您需要的深层目录结构。我已经用1600万张图片完成了这项工作,而且效果非常好

我是这样做的:

/第一个字符/第二个字符/

具有短名称的文件(如5.jpg)将位于/5/5.jpg中


编辑:为了保持最佳性能,我完全反对任何进一步的php操作,如salt、md5等。保持简单明了。

“好的,将所有图像存储在/img/中不是一件好事,因为会有很多。”-您预计会有多少?你为什么认为这是个问题?+1对于帕维尔
将请求重定向到PHP脚本,让它处理输出
我认为这是个坏主意。让您的web服务器直接为图像服务,它将为您处理很多事情,比如资源缓存。关于MD5,您可以将图像存储在/some/path/img/123456789.jpg中,并直接链接到此图像(123456789将是MD5字符串)。此外,您还可以将这两种技术结合起来:generate和md5,确保其长度始终相同,将其拆分为n个部分,并使用您提供的技术(/img/78/51/15178.jpg)@Pavel我希望是数千,5000+。我不喜欢在一个目录中有1000多个文件的想法。或者这不是问题?@pomeh是的,但问题是,图像的名称是它所属记录的id,因此它将从1变为5000+。@renocor,那么,问题出在哪里?您可以始终将5.jpg图像放在/images/5/目录中。您可以进一步解释该方法,或者共享一个解释该方法的链接吗?我还是不明白,你如何通过htaccess重定向请求?1458.jpg将位于/1/4/5/1458.jpg?@renocor;)确切地这里没有重定向!简单地在文件名的每个字符之间加一个/。