标准基本上是这样的:
初步想法:
printf('%u',crc32(microtime(true)));
详细说明: 上传文件时,我基本上想保留上传者指定的唯一文件名,所以为了避免任何命名冲突,我想把它放在一个唯一命名的目录中......
答案 0 :(得分:6)
[编辑]等一下。 PHP包含在标准库中unique id generator function。还有other approaches。
答案 1 :(得分:1)
经典技术看起来像
+ uploader-name
+ 20090401
+ 010000 // hhmmss
+ 013000 // hhmmss
+ 014500 // hhmmss
...
+ 20090402
根据所需的粒度添加级别,附加“a”,“b”,“c”,...等。
这适用于esp。好吧,如果用户按时间顺序与文件相关。
你最终会做一些存在的枚举,但这并不是那么痛苦。我已经多次使用过(包括使用PHP),主要是因为用户阻力低于我发现的任何替代品。
如果您如此倾向,可以美化日期表达 - “2009年4月1日”,“01:45 AM”等。
答案 2 :(得分:0)
没有指定语言,在Ruby中我会这样做:
require 'digest/md5'
Digest::MD5.hexdigest(Time.now.to_s)
=> "f531384b3cc8c60b7c5b7ad087cb0ae4"
答案 3 :(得分:0)
这听起来像是一个“默默无闻”的问题。我会建议反对任何创建潜在敏感数据的东西,并以一种安全的方式暴露它(即使是很短的时间)只是因为期望没有人会猜到这个位置。存在暴力攻击,它们可以破坏这种“安全”。
答案 4 :(得分:0)
使用日期和时间生成名称
答案 5 :(得分:0)
我会使用类似的东西:
$salt='Whatever you want';
$folderName=SHA1($salt.date('U'));
日期('U')返回自Unix Epoch(1970年1月1日00:00:00 GMT)以来的秒数,因此除非您同时生成多个文件夹,否则它可能会是唯一的?
在这种情况下,只需巧妙地更改$ salt值(使其成为用户名或随机数等)。
答案 6 :(得分:0)
如果用户大致知道生成目录的时间,那么基于时间的哈希(md5或sha)就可以猜测。他们所需要做的就是设置一个简单的脚本来生成所有可能的方法,只需几秒钟,然后点击站点寻找响应。添加盐虽然有用,但从长远来看并没有太大作用。
对于OP,上述情况适用于任何方法。如果您运行的是非常快的服务器,则需要监视针对随机目录的命中。只有5个字母的目录意味着有人可以手动命中网站足够的时间来发现目录。 15确实有所增加,但是有一些机器以脚本方式进行,它并非可能性。
答案 7 :(得分:0)
C ++标准在cstdio(stdio.h)中都有函数tmpfile和tmpnum,并相应地创建临时文件和临时文件名。但是在程序结束时删除了tmpfile。我会链接他们,但遗憾的是我还不能发布链接。