gpt4 book ai didi

PHP防止用户上传同一个文件两次的机制

转载 作者:可可西里 更新时间:2023-10-31 23:09:18 25 4
gpt4 key购买 nike

我试图让用户通过 PHP 网站上传文件。由于所有文件都保存在服务器上的单个文件夹中,因此可以想象(尽管概率很低)两个不同的用户可以上传两个文件,虽然不同,但名称完全相同。或者它们可能是完全相同的文件。

在这两种情况下,我想使用 exec("openssl md5 ". $file['upload']['tmp_name']) 立即确定文件的 MD5 哈希值上传后。然后,我将检查数据库中是否存在任何相同的 MD5 哈希值,如果找到,我将不会完成上传。

但是,在move_uploaded_file 文档中,我发现了这条评论:

Warning: If you save a md5_file hash in a database to keep record of uploaded files, which is usefull to prevent users from uploading the same file twice, be aware that after using move_uploaded_file the md5_file hash changes! And you are unable to find the corresponding hash and delete it in the database, when a file is deleted.

真的是这样吗? 将 tmp 目录中的文件移动到永久位置后,其 MD5 散列是否会发生变化?我不明白为什么会这样。不管怎样,是否有另一种更好的方法来确保同一文件不会多次上传到文件系统?

最佳答案

如果您被答案中给出的所有原因说服并决定根本不使用 md5(我仍然不确定您是否想要或必须使用哈希),您可以为每个附加一些独特的东西用户和上传到每个文件名的时间。这样你最终会得到更易读的文件名。类似于:$filename = "$filename-$user_ip_string-$microtime";。当然,您必须在此之前准备好所有三个变量并对其进行格式化,这是不言而喻的。

不可能同时出现相同的文件名、相同的 IP 地址和相同的微时间,对吗?您可以轻松地只使用微时间,但 IP 将使它更加确定。当然,就像我说的,如果您决定不使用散列并寻求更简单的解决方案,那么这一切都会发生。

关于PHP防止用户上传同一个文件两次的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8262610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com