【问题标题】:How to check for duplicate files in php?如何检查php中的重复文件?
【发布时间】:2009-07-22 06:55:56
【问题描述】:

我真正想做的是在上传文件之前或之后检查相同的文件是否存在,有没有一种有效的方法?

嗯,就是这样!

编辑:实际上它是在之后还是之前并不重要,只要它可以检测到重复即可。

【问题讨论】:

    标签: php javascript flash


    【解决方案1】:

    您无法在上传文件之前进行检查。
    上传后,您可以比较文件的file sizesMD5s 以检查它们是否相同。

    【讨论】:

    • 我不知道为什么我说'之前',因为这并不重要,谢谢 md5 似乎足够好,有理由为此检查文件大小吗?
    • 文件大小检查要快得多 - 如果大小不同,您可以跳过 md5,因为您知道文件不同
    【解决方案2】:

    编辑:抱歉没有意识到您之前说过...您可以做的是在启用上传按钮之前使用 AJAX 查询服务器。

    脚本:

    function CreateRequest()
    {
    var xmlhttp = false;
    
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
        } catch (e) {
            xmlhttp=false;
        }
    }
    
    if (!xmlhttp && window.createRequest) {
        try {
            xmlhttp = window.createRequest();
        } catch (e) {
            xmlhttp=false;
        }
    }
    
    if(!xmlhttp)
    {
        alert("Could not create XmlHttpRequest. Browser does not support.");
    }
    
    return xmlhttp;
    }
    
    
    function validate()
    {
        xmlhttp = CreateRequest();
        xmlhttp.open( "GET", "checkfile.php?file=" + document.getElementById('upload').value );
        xmlhttp.send( false );
        if( xmlhttp.responseText == "YES" )
            alert( "File already exists" );
        else
            document.getElementById('go').disabled = false;
    }
    

    HTML:

    <input id="upload" type="file" name="upload" onchange="validate()"/>
    <input name="Reset" type="submit" disabled=disabled id="go" value="Go"/>
    

    PHP:

    $file = basename( $_GET['file'] );
    if( file_exists( "uploads/$file" ) )
        echo "YES";
    else
        echo "NO";
    

    【讨论】:

    • 正如在其他答案中指出的那样,您无法比较文件,但此方法将检查是否存在同名文件。
    【解决方案3】:

    如果不使用 AJAX 或 flash,您将无法做到这一点,因为 PHP 负责上传本身,并且您的脚本从文件已上传的位置开始。我会在您的答案中添加适当的标签,以便有人可以帮助您

    【讨论】:

      【解决方案4】:

      你只有几个选择:

      • 如果你想在用户上传之前知道,你问他文件的 md5 和,然后在服务器端检查是否已经有文件(真正用户友好)。
      • 如果您的文件有唯一的名称,则在上传前询问文件的名称(对用户也很友好)
      • 在用户上传文件之前你不能(不是你真正想要的......)

      选择你喜欢的!

      【讨论】:

        【解决方案5】:

        正如其他人之前指出的那样,在上传之前进行检查是不可能的。但是一旦文件上传,你应该比较文件的 MD5 哈希。

        您可以考虑保留一个用于缓存结果的小型数据库,而不是一遍又一遍地计算文件的 MD5 哈希值。那应该更高效。

        【讨论】:

          【解决方案6】:

          对此有更好的解决方案。

          如果你只需要找出两个文件是否相同,比较 文件哈希可能效率低下,尤其是在大文件上。没有 如果第二个字节,读取两个完整文件并进行所有数学运算的原因 每个文件的内容都不一样。如果不需要存储哈希值 供以后使用,可能不需要计算哈希值 只是为了比较文件。

          可以在此处找到更快的解决方案: http://php.net/manual/en/function.md5-file.php#94494

          100% 确定,之后您仍然可以使用 md5_file 方法。

          【讨论】:

            猜你喜欢
            • 2017-08-17
            • 1970-01-01
            • 2020-05-23
            • 2011-11-25
            • 1970-01-01
            • 2019-06-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多