ustb
注册会员

中级会员
UID 26170
精华
2
积分 100
帖子 259
金钱 80 喜悦币
威望 20
人脉 0
阅读权限 20
注册 2004-2-15
状态 离线
|
[推荐阅读] php安全问题
分目录用md5也不会慢到哪里去吧,个人感觉
我的办法:
md5一个字串,跟值相关,比如用户ID,要想分得更乱,再加个字符串因子
然后按两个一组进行拆分,因为md5中的字母范围是从0-f,两个数字的组合就是16*16 = 256,也就是说每一级目录的总数最多只有256
这256个目录里的每一个里又可以用两个字串再生成256个目录,如此进行,分到两级之后,最大的目录数是256*256 = 65536
同理,三级就是256*256*256,下面的函数限制到6级,真要到6级目录,那能创建的目录数便是256的6次方,自己算算吧,数不过来了。
总之,不论咋分,一个目录下的文件夹数量都不会超过256
其实这个办法也可以扩展开来,可以自定义一些字母来做目录名,不一定非要用16进制的字符
function getEncodeDir($encode_key, $value, $level=2)
{
$level = (int)$level;
$encode_str = md5($encode_key."+".$value);
if($level > 6)
{
$level = 6;
}
$dir_name = array();
for($i = 0; $i < $level; $i++)
{
$dir_name[] = substr($encode_str, $i*2, 2);
}
Return implode('/',$dir_name);
}
例:
$user_id = 741;
$dir_path = getEncodeDir("00544", $user_id, 3);
生成的目录:
58/bf/52
顺便说下,真是需要一次性生成6级这样的目录,估计任何电脑都会死掉,高效的办法是在需要的时候再生成
既然我们能够避免在同一时间去生成上万个目录,为什么要去死磕呢?
|  我的博客:http://blog.xoyo.com/ouran |
|