如何在php中检查重复文件?

如何在php中检查重复文件?,php,javascript,flash,Php,Javascript,Flash,我真正想做的是检查上传文件前后是否存在相同的文件,有没有有效的方法 好了,就这样 编辑:事实上,它是在之后还是之前都没有关系,只要它能检测到DUP。编辑:对不起,我没意识到你之前说过。。。您可以在启用上载按钮之前使用AJAX查询服务器 脚本: function CreateRequest() { var xmlhttp = false; if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { try {

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

好了,就这样


编辑:事实上,它是在之后还是之前都没有关系,只要它能检测到DUP。

编辑:对不起,我没意识到你之前说过。。。您可以在启用上载按钮之前使用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"/>

如果不使用AJAX或flash,就无法实现这一点,因为PHP本身负责上传,脚本从文件已经上传的位置开始。我将在您的答案中添加相应的标签,以便有人可以帮助您上传文件之前无法检查。

上传后,您可以比较文件的大小,检查它们是否相同。

您只有很少的选择:

  • 如果你想在用户上传之前知道,你可以问他文件的md5总和,然后在服务器端检查是否已经有一个文件(真正的用户友好)
  • 如果您的文件具有唯一的名称,则在上载前询问文件的名称(用户友好型)
  • 你不能在用户上传文件之前(不是你真正想要的…)

挑一个你喜欢的

正如其他人之前指出的那样,上传前检查是不可能的。但一旦上传了文件,就应该比较文件的MD5散列


<>而不是一次又一次地计算文件的MD5哈希值,你可以考虑保存一个数据库来缓存结果。这应该更有效。

有更好的解决方案

如果您只需要找出两个文件是否相同,请比较 文件哈希可能效率低下,尤其是在大型文件上。没有 如果第二个字节 每个文件的类型不同。如果不需要存储哈希值 对于以后的使用,可能不需要计算散列值 只是为了比较文件

可以在此处找到更快的解决方案:


100%可以肯定的是,您以后仍然可以使用md5_文件方法。

正如其他答案中所指出的,您无法比较文件,但此方法将检查是否存在同名文件。我不知道为什么我会说“之前”,因为这并不重要,谢谢md5似乎足够好,是否有理由为此检查文件大小?文件大小检查要快得多-如果大小不同,您可以跳过md5,因为您知道文件不同
$file = basename( $_GET['file'] );
if( file_exists( "uploads/$file" ) )
    echo "YES";
else
    echo "NO";