【发布时间】:2011-04-02 10:14:04
【问题描述】:
我的网站成员正在上传图片文件。
确保没有上传同名文件的首选/最佳选择方法是什么?
我的想法是在文件名中的某处包含成员 ID,然后 md5 对其进行加密。还有其他想法吗?
【问题讨论】:
我的网站成员正在上传图片文件。
确保没有上传同名文件的首选/最佳选择方法是什么?
我的想法是在文件名中的某处包含成员 ID,然后 md5 对其进行加密。还有其他想法吗?
【问题讨论】:
如果您不担心文件名的可读性/长度,那么在添加相关扩展名之前使用uniqid 生成文件名的“基础”可能是最简单的解决方案。
(如果您可能会在亚微秒内生成 很多 个文件名,请启用 more_entropy 选项。)
【讨论】:
$prefix参数以防万一。
您可以将当前纪元时间合并起来,有点麻烦。更好的解决方案是有一个 Singleton 类,它从递增的私有数据成员发出标识符号。
【讨论】:
使用@Middaparka 所示的uniqid() 将是一种相当安全的方法,如果您不关心文件名的外观,这是最好的方法。同一个用户极不可能在同一微秒内对同一个文件发出两个相同的请求。
如果您想保留原始文件名(这会带来 - 可解决但重要的 - 非 ASCII 字符的问题),不断增加的计数器将是最安全的事情。
1_IMG0085.JPG
2_Lilies_and_pond.JPG
3_Awesome_Party_Pic.JPG
这种方式不会发生冲突,但是如果您想保证竞争条件安全,那么实现这样的计数器并非完全容易。
当用户上传图片时,您是否正在创建数据库记录?在这种情况下,您可以使用新创建记录中的 ID 作为计数器变量。
【讨论】:
只需将图像重命名为 GUID + 图像扩展名
【讨论】: