正确的方法来确保所有文件都有唯一的名称?

时间:2011-04-02 10:14:04

标签: php file upload unique

我的网站成员上传了图片文件。

确保没有上传同名文件的首选/最佳选择方法是什么?

我的想法是将成员ID合并到文件名中的某处,然后md5对其进行加密。还有其他想法吗?

4 个答案:

答案 0 :(得分:3)

如果您不担心文件名的可读性/长度,那么在添加相关扩展名之前使用uniqid生成文件名的“基础”可能是最简单的解决方案。

(如果您可能在亚微秒内生成 lot 文件名,请启用more_entropy选项。)

答案 1 :(得分:0)

作为一个kludge你可以纳入当前的纪元时间。更好的解决方案是使用Singleton类从增量私有数据成员发出标识符编号。

答案 2 :(得分:0)

@Middaparka所示使用uniqid()将是一种相当安全的方式,如果您不关心文件名的外观,则最好使用1_IMG0085.JPG 2_Lilies_and_pond.JPG 3_Awesome_Party_Pic.JPG 。同一用户极不可能设法在相同的微秒内使用相同的文件发出两个相同的请求。

如果你想保留原始文件名(带来 - 可解决但很重要 - 非ASCII字符的问题),一个不断增加的计数器将是最安全的。

{{1}}

这种方式不存在碰撞的可能性,但如果您希望竞争条件安全,那么这样的计数器并非完全无法实现。

您是否在用户上传图片时创建数据库记录?在这种情况下,您可以使用新创建的记录中的ID作为计数器变量。

答案 3 :(得分:0)

只需将图像重命名为GUID +图像扩展名