我想知道我是否将uniqid
函数用于文件上传系统,
我的意思是,我更改的每个人都上传的文件名为uniqid
名称
所以可能会发生两个文件名相同的情况? 如果是的话,解决方案是什么? 我应该这样做:
$uniq = uniqid();
while (file_exists($uniq)) $uniq = uniqid();
感谢您的帮助!
答案 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文档