
最近排查一个 PHP 后台时遇到过这种情况用户连续上传两份文件页面都提示成功但最后服务器目录里只剩下一份。数据库记录有两条下载时却都指向同一个文件。继续看上传代码后发现程序直接使用了用户原始文件名保存。如果两个人上传的文件都叫合同.pdf或者同一个用户重复上传同名文件后上传的文件就可能把前一个文件直接覆盖。尤其是合同、客户附件、报表这类文件原始文件名重复其实非常常见。后来把文件保存规则改成由系统生成唯一名称不再直接使用用户上传的名字。例如通过业务编号、时间、随机字符串组合生成实际存储文件名原始文件名只保存到数据库用来展示给用户。同时在数据库中记录文件路径、原文件名、文件大小、扩展名和上传时间。真正下载时通过文件 ID 查询路径而不是根据文件名拼接地址。对于覆盖上传的业务也单独设计版本逻辑明确是新增文件还是替换旧文件避免两种操作共用同一套保存方式。现在做 PHP 文件上传时我一般会把“用户看到的文件名”和“服务器实际保存的文件名”分开处理。文件上传成功不代表文件管理就安全。命名规则如果没有提前设计好后期很容易出现覆盖、找错文件甚至历史附件丢失的问题。#PHP开发 #文件上传 #后台系统 #文件管理