使用uniqid上传文件系统

时间:2015-09-09 13:14:08

标签: php file

我想知道我是否将uniqid函数用于文件上传系统, 我的意思是,我更改的每个人都上传的文件名为uniqid名称

所以可能会发生两个文件名相同的情况? 如果是的话,解决方案是什么? 我应该这样做:

$uniq = uniqid();
while (file_exists($uniq)) $uniq = uniqid();

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

  

所以可能会发生两个文件名相同的情况?

是。 uniqid() is nothing more than a timestamp。因此,如果同时上传两个文件,则它们可以具有相同的文件名。

  

如果是,那解决方法是什么?

有很多解决方案。基本上他们都归结为添加某种独特的字符串。例如,您可以使用:md5($filename . time())(可能仍有冲突)或更好:md5($filename . $database_insert_id)

答案 1 :(得分:0)

uniqid()基于特定的microtime,因此可以非常安全地说使用它时很难获得dublicate文件名。同时这是基于系统时间,并且可以让两个人在同一时间上传文件(尽管不太可能),所以你也可以将用户名附加到文件名,所以几乎不可能文件有公布的名字。

答案 2 :(得分:0)

您可以通过前缀和增加熵来提高字符串的唯一性。尝试做这样的事情:

$prefix = {the original file name} + {the file size};
$fileName = uniqid($prefix, TRUE);

执行此类操作时,您可以利用两个不同的因素:客户端文件名和大小。两者结合可以大大增加返回字符串的唯一性。有关前缀和熵参数的更多详细信息,请参阅http://php.net/manual/en/function.uniqid.php

上的官方php文档