网站上图像文件的名称:哈希值还是随机字符串?

时间:2012-02-28 08:34:29

标签: image filenames storage

我已经阅读了几个关于命名上传图像的问题,人们通常会建议使用哈希图像内容来生成唯一的文件名,以及自动防止存储重复项。但是,如果两个用户上传相同的图像,然后其中一个想删除它? 每次删除图像时,我们都需要对其他所有者进行一些检查。

IMHO重复文件的可能性通常很小;同时,这个检查需要添加一些代码串,并且在性能方面会花费一些成本(画廊倾向于使用大表)。

那么,为什么不使用真正随机的字符串作为名称? 在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;
}

您怎么看?

1 个答案:

答案 0 :(得分:1)

为什么不用用户ID为图像文件添加前缀,或者为每个用户创建一个文件夹? (我认为将太多文件保存在同一个文件夹中并不是一个好主意。) 只要符合您的要求,您就可以做任何您想做的事情,但可以证明Hash方法更有效。