比较PHP中的文件校验和

时间:2015-09-08 22:06:48

标签: php file-upload checksum

我正在撰写文件上传网站,并对节省空间感兴趣。如果用户上传文件,我想确保此文件之前尚未上传(如果已经,我将只指向数据库中的现有文件)。

我正在考虑在文件上使用sha1_file(),检查数据库以查看摘要数据库中是否存在摘要。然后我想起了鸽子原则,如果有一个sha1摘要匹配,我决定相互检查未消化的文件。

这对我来说似乎效率低下。我想我可以在校验和匹配的情况下检查每个文件的第一个千字节。

我对RAM与ROM的价值并没有太多考虑,检查文件所需的处理能力可能比我节省的存储空间花费更多。

这种方法有什么缺点吗?我是否在浪费时间,甚至为此烦恼?

1 个答案:

答案 0 :(得分:1)

您可以使用md5( file_data )生成文件的名称,并且永远不可能使用其他名称上传相同的文件。唯一的问题是技术上可能两个不同的文件生成相同的md5,但它不太可能,特别是如果这两个文件具有相同的扩展名,所以你可以认为这是一个非问题。在这个原理图下,没有理由检查。如果两个哈希相同,它只会覆盖存储的文件。这就是大多数文件存储引擎在内部工作的方式,例如zimg。如果你是关于碰撞的偏执狂,你可以先看到文件是否存在计算的散列和扩展名,如果存在,你可以比较该存储文件的数据与你试图存储的文件的数据。如果数据不相等,您可以通过电子邮件向您发送警报。

$data = file_get_contents('flowers.jpg');

$name = md5($data).'.jpg';

$fh = fopen($name,'w+');

fwrite($fh,$data);

fclose($fh);