【问题标题】:Correct way to make sure all files have unique names?确保所有文件具有唯一名称的正确方法?
【发布时间】:2011-04-02 10:14:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: php file upload unique


    【解决方案1】:

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

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

    【讨论】:

    • +1:如果您不关心文件名,这是最简单的方法。可能会添加当前用户的ID和原始文件名作为$prefix参数以防万一。
    • 谢谢,我刚刚阅读了它,似乎正是我需要的。
    【解决方案2】:

    您可以将当前纪元时间合并起来,有点麻烦。更好的解决方案是有一个 Singleton 类,它从递增的私有数据成员发出标识符号。

    【讨论】:

      【解决方案3】:

      使用@Middaparka 所示的uniqid() 将是一种相当安全的方法,如果您不关心文件名的外观,这是最好的方法。同一个用户极不可能在同一微秒内对同一个文件发出两个相同的请求。

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

      1_IMG0085.JPG
      2_Lilies_and_pond.JPG
      3_Awesome_Party_Pic.JPG
      

      这种方式不会发生冲突,但是如果您想保证竞争条件安全,那么实现这样的计数器并非完全容易。

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

      【讨论】:

      • 我正在将图像插入数据库中,但我更喜欢通过将文件名转换为随机名称来隐藏文件名,以防名称中有任何不恰当的词。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2012-10-31
        • 2021-03-16
        • 2022-06-25
        • 2011-07-08
        • 2016-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-07
        相关资源
        最近更新 更多