2012-02-28 30 views
0

我已阅读有关命名上传的图片的几个问题,人们通常建议哈希图像内容生成唯一的文件名以及自动防止重复存储。但是,如果两个用户上传相同的图像,然后其中一个用户想删除它? 每次图像被删除时,我们都需要为其他所有者执行一些检查。网站上图像文件的名称:散列或随机字符串?

的重复文件恕我直言可能性通常是很小的;与此同时,这种检查需要添加几串代码,并且在性能方面会花费一些代价(图库往往使用巨大的表)。

那么,为什么不使用真正的随机字符串名称? 在PHP中,例如:

$filename = md5(mt_rand()); 

且不说哈希生成相当长的值,并用随机值,如你所愿(记住的变化,这个数字也改变饲养)可以调整长度:

$filename = substr(md5(mt_rand()), 0, 15); 

而且随着循环可能的碰撞(想法来自另一个问题被盗):

while (true) { 
$filename = substr(md5(mt_rand()), 0, 15); 
if (!file_exists('somedir/'.$filename.'.jpg')) break; 
} 

你觉得呢?

回答

0

你为什么不只是由前缀的用户ID的图像文件,或为每个用户创建一个文件夹? (我认为它不是一个好主意,让太多的文件在同一文件夹。) 只要它符合你的要求,你可以做任何你想要的,但哈希方法可能被证明更有效。

+0

我真的在Webdev的新手,没有我自己有吨图像的经验,但也有人说,分裂文件夹提高性能,如A/B/abcdef.jpg。至于使用主键,我也想知道为什么在其他问题中的人不会这样说。 – Kadilov 2012-02-28 09:05:51

+0

为包含百万个文件的文件夹创建和读取索引肯定会减慢整个过程。 – 2012-02-28 09:11:07