题
标准基本上是这样的:
- 文件夹会存在对约24-48小时
- 文件夹的名字可不容易猜测通过使用者(如果使用一个URL)
- 文件夹,名称应当简短为5-15个字符
最初的想法:
printf('%u',crc32(microtime(true)));
详细信息:在上传一个文件,我基本上希望保持唯一的文件名称命名的上载,所以要避免任何命名的碰撞我想把它放在一个独特的命名的目录...
解决方案
[编辑等等。PHP包括的权利的标准图书馆 唯一的id,发电机的功能.还有 其他的办法 太。
其他提示
经典的技术看起来喜欢的东西
+ uploader-name
+ 20090401
+ 010000 // hhmmss
+ 013000 // hhmmss
+ 014500 // hhmmss
...
+ 20090402
增加水平,追加"a"、"b"、"c",...等等。基于所需的粒度。
这个工作esp。好吧如果用户涉及文件在所有按时间顺序。
你最终做一些存在枚举,但这并不是说痛苦。我用很多时候(包括与PHP),主要是因为用户的抵抗是低于用于任何替代我已经找到。
如果你是这样的倾向,你可以美丽的日期的表达"2009-Apr-01","01:45",等等。
语言不是指定的,在红宝石我就会做的事:
require 'digest/md5'
Digest::MD5.hexdigest(Time.now.to_s)
=> "f531384b3cc8c60b7c5b7ad087cb0ae4"
这听起来像一个"安全通过默默无闻"的问题。我会建议反对任何创造可能敏感的数据,并公开它的(即使是短时间)方式,这是安全的,只是因为有一个期望,没有人会想位置。暴力攻击存在,他们可以撕开这种类型的"安全"。
使用的日期和时间,以便产生的名字
我会用这样的:
$salt='Whatever you want';
$folderName=SHA1($salt.date('U'));
Date('U')返回秒因为Unix Epoch(月1日1970年00:00:00GMT),所以它可能是独特的,除非你是生成多个文件夹在同一时间?
在这种情况下,只是微妙地改变美元的盐价值(作出它的一个用户名或随机数量等)。
根据哈希(无论是md5或沙)上的时间,使它猜测,如果用户所知的约时的目录产生的。所有他们需要做的是安装一个简单的脚本生成的所有可能涵盖几秒钟的两侧,然后点击该网站寻求答复。增加一个盐,而这会有帮助,不会很多良好的中长期运行。
运算,上述代表真正的的任何方法。如果你正在运行的一个非常快速的服务,将需要监视的命对随机的目录。只有5个字母的目录意味着有人可以手动打网站足够的时间来发现该目录。15并增加它有点,但有几个机器做它在一个脚本的方式,它并非不可能。
C++标准的具有功能tmpfile和tmpnum在cstdio(stdio.h),并创建一个临时文件和临时文件名称。tmpfile是删除末尾的程序。我会把它们连接但可悲的是,我不能发表的链接。