【发布时间】:2016-02-14 22:19:51
【问题描述】:
我只是从表单上传文件,我不确定生成文件名的方法..
在这种情况下我应该使用这样的东西:
sha1(uniqid(mt_rand(), true))
我应该在哪里使用这个:
uniqid()
【问题讨论】:
标签: php forms file-upload upload
我只是从表单上传文件,我不确定生成文件名的方法..
在这种情况下我应该使用这样的东西:
sha1(uniqid(mt_rand(), true))
我应该在哪里使用这个:
uniqid()
【问题讨论】:
标签: php forms file-upload upload
uniqid() 足以作为文件名。
但请注意,uniqid() 和 sha1() 都不会为您提供绝对唯一的字符串。因此,在将文件保存到 IO 之前,请检查是否已存在具有该名称的文件。
【讨论】:
我同意卢卡斯泰纳的观点。他们不会给你绝对的独特性;使用GUID。
您可以非常简单地定义 GUID 函数,如下所示:
function getGuid() {
return strtolower( sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X',
mt_rand(0, 65535),
mt_rand(0, 65535),
mt_rand(0, 65535),
mt_rand(16384, 20479),
mt_rand(32768, 49151),
mt_rand(0, 65535),
mt_rand(0, 65535),
mt_rand(0, 65535)) );
// from the official PHP documentation
}
在我看来,您只是在使用 sha1 函数增加运行时间(无论多小);你最好使用uniqid() 函数。但是,文档确实这样说:
警告
此函数不会创建随机或不可预测的字符串。此功能不得用于安全目的。使用密码安全的随机函数/生成器和密码安全的哈希函数来创建不可预测的安全 ID。
所以,如果你想要加密安全的随机数,你可以使用:
random_int()openssl_random_pseudo_bytes()我更喜欢第二个。
【讨论】: