此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【javastation】截止到2008-07-01 09:44:44的历史汇总数据(不包括此帖):
发帖数:3 发帖分:50
结贴数:1 结贴分:20
未结数:2 未结分:30
结贴率:33.33 % 结分率:40.00 %
楼主该结一些帖子了
楼主【javastation】截止到2008-07-01 09:44:44的历史汇总数据(不包括此帖):
发帖数:3 发帖分:50
结贴数:1 结贴分:20
未结数:2 未结分:30
结贴率:33.33 % 结分率:40.00 %
楼主该结一些帖子了
不知道,其他人有没有什么更好的 idea
不过就算MD5内容也不一定能保文件的唯一
那个索引可以这样MD5(file_get_contents($filename))
几十w个? 对于MYSQL
即使用户上传的文件达到了100w数量级,只要你索引合适, 也不有什么问题建议,直接将md5串存入mysql, 在其上做索引。
这里并不存在效率问题,为什么要 MD5(file_get_contents($filename)) 呢?
md5_file($filename) 不就可以了吗?问题在于文件的唯一性要从两个方面来判断:
1、文件名
2、文件内容众所周知,md5因为碰撞的存在,并不能绝对保证数据的唯一性
尽管出现碰撞的概率极小假设不去考虑碰撞的存在,并且以文件内容的md5值作为文件名的话
并不需要去数据库中查询,而只需做一下简单的文件是否存在的判断
if(! file_exists(md5_file($_FILES['tmp'])) {
// 不存在时的操作
}else {
// 存在时的操作
}
这里的file_exists是上传的临时文件$f = $_FILES['file'];//假设你的文件域名为file
if(0<$f['error']) exit('上传不成功');//得到文件md5值【md5_file($f['tmp_name'])】并查询数据库中该索引是否存在
if(存在)
// 存在时的操作
}else {
// 不存在时的操作
}
关于文件数量,可能是千万级别的数量。单个文件大小从1M到 100M不等。是一个网络硬盘的项目。if(! file_exists(md5_file($_FILES['tmp'])) {
}
这个方法显然不可能,后面的存储是分布散列到不同的存储设备上的。 只能通过数据库来查询md5值的方式。