【问题标题】:Unique file name based on SRC attibute [duplicate]基于 SRC 属性的唯一文件名 [重复]
【发布时间】:2013-04-16 22:26:36
【问题描述】:

在我的项目中,我有来自其他域的图片链接

<img src="http://www.somewhere.com/images/whatever-image.jpg">

我想用某个名称在本地重新保存它基于其原始 src 属性,这样我可以稍后检查我是否已经在本地保存了此图像。我的问题是,当我在 src 上使用 md5() 时,它是唯一的吗?示例:

$src = "http://www.somewhere.com/images/whatever-image.jpg"
if (file_exists('local_path'.md5($src)) {
...
}

在这种情况下我可以依赖 md5() 吗?如果没有,如何正确完成?

【问题讨论】:

标签: php md5 unique


【解决方案1】:

在这种情况下使用 MD5 是相当安全的。快速的哈希时间,这使得它对于加密目的不安全,实际上是这里的一个奖励。

对于冲突的概率,例如:How many random elements before MD5 produces collisions?

另一方面,出于您的目的,只需从源属性值中删除文件路径中不允许的那些字符就足够了,即。 e.

$localFileName = str_replace(array('/', ':'), '', $src); //may need to strip '&amp;', too..

这样文件名更易于阅读,并且在需要时更易于进一步处理

【讨论】:

    【解决方案2】:

    我想你可以。碰撞仍然可能发生,但这种可能性非常罕见。

    【讨论】:

      【解决方案3】:

      试试SHA1(),它会比MD5()少碰撞。但是,除非您需要对 URL 进行模糊处理,否则您根本不需要使用这些哈希值。只需将字符串保存到数据库中的文本字段中,如果需要,可以运行url_encode()。这样您就可以无限扩展而不必担心碰撞。

      【讨论】:

      • 那些会是一些非常不整洁的文件名
      • 我无法使用数据库。这是一种即时检查文件是否已经存在的方法。我会寻找 sha1()。
      【解决方案4】:

      将当前时间戳添加到路径。这将确保路径是唯一的。

      【讨论】:

      • 如果我不知道文件已保存的时间戳,我该如何检查文件是否存在?
      猜你喜欢
      • 2016-02-20
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      相关资源
      最近更新 更多