我真正想要做的是检查在上传文件之前或之后是否存在相同的文件,有没有一种有效的方法呢?
嗯,就是这样!
编辑:实际上,无论是之前还是之后,只要它可以检测到重复就无所谓。
答案 0 :(得分:4)
上传文件前无法检查 上传后,您可以比较文件的file sizes和MD5s,以检查它们是否相同。
答案 1 :(得分:1)
编辑:抱歉没有意识到你之前说过...你可以做的是在启用上传按钮之前使用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";
答案 2 :(得分:1)
如果不使用AJAX或Flash,则无法执行此操作,因为PHP负责上传本身,并且您的脚本在文件已上载的位置开始。我会在你的答案中添加适当的标签,以便有人可以帮助你
答案 3 :(得分:0)
你只有很少的选择:
选择你喜欢的那个!
答案 4 :(得分:0)
在上传之前检查,正如其他人之前指出的那样,是不可能的。但是上传文件后,您应该比较文件的MD5哈希值。
您可以考虑保留一个缓存结果的小数据库,而不是一遍又一遍地计算文件的MD5哈希值。这应该更高效。
答案 5 :(得分:0)
有一个更好的解决方案。
如果你只需要找出两个文件是否完全相同,那就进行比较 文件哈希可能效率低下,尤其是在大文件上。没有 有理由读取两个完整的文件,并在第二个字节时进行所有数学运算 每个文件都不同。如果您不需要存储哈希值 供以后使用,可能不需要计算哈希值 只是为了比较文件。
可以在这里找到更快的解决方案: http://php.net/manual/en/function.md5-file.php#94494
要100%确定,之后你仍然可以使用md5_file方法。