此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【javastation】截止到2008-07-01 09:44:44的历史汇总数据(不包括此帖):
发帖数:3                  发帖分:50                 
结贴数:1                  结贴分:20                 
未结数:2                  未结分:30                 
结贴率:33.33 %            结分率:40.00 %            
楼主该结一些帖子了

解决方案 »

  1.   

    md5应该是最准确的方法,其他的,比如判断文件名,文件开头内容,或者中间内容,==,也都是比较耗资源和I/O的,
    不知道,其他人有没有什么更好的 idea
      

  2.   

    你要确保唯一   你只有MD5文件内容而不是文件名等其他的
    不过就算MD5内容也不一定能保文件的唯一
    那个索引可以这样MD5(file_get_contents($filename))
      

  3.   

    7楼的同学,我很关心效率问题。不知道 MD5(file_get_contents($filename)) 的效率怎么样啊~~~
      

  4.   

    我看了一下这里的一些对比,发现相对的还是MD5速度最快。http://www.cnblogs.com/bjrmt/archive/2006/07/11/447912.html不过最好能有更好的方法。庞大的索引去数据库中查询有没有重复值也是一个问题啊。
      

  5.   

    楼上,你的上传文件能有多少? 
    几十w个? 对于MYSQL
    即使用户上传的文件达到了100w数量级,只要你索引合适, 也不有什么问题建议,直接将md5串存入mysql, 在其上做索引。
      

  6.   

    这个问题不是那么简单吧?
    这里并不存在效率问题,为什么要 MD5(file_get_contents($filename)) 呢?
    md5_file($filename) 不就可以了吗?问题在于文件的唯一性要从两个方面来判断:
    1、文件名
    2、文件内容众所周知,md5因为碰撞的存在,并不能绝对保证数据的唯一性
    尽管出现碰撞的概率极小假设不去考虑碰撞的存在,并且以文件内容的md5值作为文件名的话
    并不需要去数据库中查询,而只需做一下简单的文件是否存在的判断
    if(! file_exists(md5_file($_FILES['tmp'])) {
      // 不存在时的操作
    }else {
      // 存在时的操作
    }
      

  7.   

    楼上的 ,如果一个目录下的文件数目太多你的file_exists的效率会远远低于查询一次数据库。
      

  8.   


    这里的file_exists是上传的临时文件$f = $_FILES['file'];//假设你的文件域名为file
    if(0<$f['error'])    exit('上传不成功');//得到文件md5值【md5_file($f['tmp_name'])】并查询数据库中该索引是否存在
    if(存在)
      // 存在时的操作
    }else {
      // 不存在时的操作
    }
      

  9.   

    我的需求是:不用判断文件名是否重复,只需要判断文件内容是否重复。
    关于文件数量,可能是千万级别的数量。单个文件大小从1M到 100M不等。是一个网络硬盘的项目。if(! file_exists(md5_file($_FILES['tmp'])) { 

    这个方法显然不可能,后面的存储是分布散列到不同的存储设备上的。 只能通过数据库来查询md5值的方式。 
      

  10.   

    linux系统下对文件提供md5校验,就是防止文件内容被人注入病毒之类的。你可以找找这方面的资料。