我试图允许用户通过 PHP 网站上传文件。由于所有文件都保存在服务器上的单个文件夹中,因此可以想象(尽管概率很低)两个不同的用户可以上传两个文件,虽然它们不同,但名称完全相同。或者它们可能是完全相同的文件。
在这两种情况下,我想exec("openssl md5 " . $file['upload']['tmp_name'])
在文件上传后立即使用它来确定文件的 MD5 哈希值。然后,我将检查数据库中是否存在任何相同的 MD5 哈希,如果找到,我将不会完成上传。
但是,在move_uploaded_file
文档中,我发现了这条评论:
警告:如果您将 md5_file 哈希保存在数据库中以记录上传的文件,这有助于防止用户两次上传相同的文件,请注意使用 move_uploaded_file 后 md5_file 哈希会更改!当文件被删除时,您无法在数据库中找到相应的哈希并将其删除。
真的是这样吗?将 tmp 目录中的文件移动到永久位置后,它的 MD5 哈希值是否会发生变化?我不明白为什么会这样。无论如何,是否有另一种更好的方法来确保同一文件不会多次上传到文件系统?