PHP:存储文件位置......如果覆盖了什么?

And*_*rew 3 php zend-framework file-upload zend-file

我目前正在使用Zend Framework并有一个上传文件表单.经过身份验证的用户可以上载文件,该文件将存储在应用程序的目录中,以及存储在数据库中的位置.这样它就可以显示为可以下载的文件.

<a href="/upload-location/filename.pdf">Download</a>
Run Code Online (Sandbox Code Playgroud)

但我注意到的是,具有相同名称的文件将覆盖uploads目录中的文件.没有错误消息,文件名也没有增加.所以我认为该文件必须被覆盖(或永远不会上传).

在上传,移动或存储这些文件时,我应该注意哪些最佳做法?我应该始终重命名文件,以便文件名始终是唯一的吗?

Pas*_*TIN 9

通常,我们不会存储具有用户名称的文件,而是使用我们(即我们的应用程序) chosse的名称.

例如,如果用户上传my_file.pdf,我们会:

  • 在DB中存储一行,包含:
    • id; 一个自动增量,主键 - " 123",例如
    • 用户提供的名称; 所以我们可以在有人试图下载文件时发送正确的名称
    • 文件的内容类型; application/pdf或类似的东西,例如.
    • "我们的"名称:file-123例如
  • 当有文件请求时id=123,我们知道应该获取('file-' . $id)并发送哪个物理文件.
  • 我们可以使用我们存储在数据库中的名称设置一些标题发送到浏览器的"逻辑"名称,用于"另存为"对话框
  • 同样的内容类型,顺便说一句

这样,我们确保:

  • 没有文件有任何"错误"的名称,因为我们是选择它的人,而不是客户端
  • 没有覆盖:由于我们的文件名包含我们表的主键,因此这些文件名是唯一的