加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP机制阻止用户两次上传同一文件

发布时间:2020-12-13 17:09:40 所属栏目:PHP教程 来源:网络整理
导读:我试图允许用户通过 PHP网站上传文件.由于所有文件都保存在服务器上的单个文件夹中,因此可以想象(尽管可能性很低)两个不同的用户可以上传两个文件,这些文件虽然不同,但命名完全相同.或者他们可能是完全相同的文件. 在这两种情况下,我都想使用exec(“openssl
我试图允许用户通过 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地址和相同的微缩时间,对吗?你可以轻松地使用microtime,但IP会让它更加确定.当然,正如我所说,如果您决定不使用散列并寻求更简单的解决方案,那么这一切都会成功.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读