如何使用 php 将图像存储在我的服务器上并使用 mysql 对其进行索引


How can I store images on my server with php and index them with mysql?

我想将图像存储在我的服务器上,并使用我的数据库对它们进行索引,以便以后可以通过用户名或从上传图像的人那里收集的其他信息来搜索它们。我以为我会让我的程序在上传时将上传的位置保存到数据库中。我很确定这是可能的,但作为 php 的新手,我需要一个开始的地方。

这不仅仅是上传文件并将元数据存储到数据库中。确保保存应用程序以防止劫持。

  • 按表单上传图片。

  • 确保在将元数据存储到数据库中时如何处理损坏的上载或失败的上载。(否则,请使用垃圾回收之类的东西来避免磁盘空间不足或数据库条目没有相关文件。

  • 始终只有注册用户才能上传、使用会话 cookie

  • 确保您的服务器只接受有效会话的有效表单数据!!

  • 确保服务器上运行了病毒扫描程序,如果可能的话,让您的脚本对其做出反应,但不要向外部显示。

  • 重命名!!服务器上的文件,杀死文件类型后缀(将此信息存储在数据库中,包括要发送的 mimetype),也许使用压缩。

  • 永远不要让用户知道文件的存储位置!!使用下载脚本将有关文件路径的信息隐藏到外部!

编辑:

这不是一个完整的列表,只会给你一个印象,它的外观!

上传:

构建一个上传脚本,例如...

  • 像这样构建数据库表:

    文件

    uid, id, filename, real_filename, suffix, content_length, datetime_upload

    扩展(可能性列表)

    uid, id, suffix, mimetype

    用户>文件关系

    uid, id, user_id, file_id

  • 确保从有效的用户会话或退出调用上传脚本

  • 确保用户是否有权存储数据(角色模型)或退出

  • 接收表单并检查表单数据是否有效(变量、验证码等)或退出

  • 检查
  • 是否允许文件类型,可以选择在最终保存之前对文件进行二进制检查(标头中的文件类型)和/或病毒检查

  • 为文件构建一个空条目并接收file_id,否则错误

  • 构建新文件名,例如

    $new_filename = $file_id . '-' . md5($old_filename);

  • 将数据存储到光盘

  • 如果存储正常,则更新数据库条目,否则删除条目并出错

  • 存储user_id>file_id条目

下载:

构建一个下载脚本,例如...

  • 确保从有效的用户会话调用下载脚本或退出

  • 确保用户是否有权下载此数据(角色模型和用户>文件关系)或退出

  • 获取旧文件名、大小和 mimetype 以执行一些发送操作

  • 将文件发送到浏览器,并在标头中存储 mimetype,以避免文件被接受并作为不同的东西执行(例如.exe) 在客户端。添加正确的下载标头、内容长度和缓存标头。从正确的文件添加二进制数据流。

要遵循的步骤:

有几种方法可以做到这一点 - 使用 AJAX 上传器,或者您是否只是要在表单中选择图像并仅将图像与用户数据一起保存......

但是 AJAX 的简单过程是...

  • 上传图片
  • 返回映像名称
  • 使用用户引用将映像名称保存到数据库
  • 搜索 - 从数据库搜索图像引用到数据库中存储图像的位置

否则

  • 按保存
  • 将图像上传到目录
  • 如果传输成功,请保存文件名以及用户信息
  • 按用户引用搜索数据库,并获取该用户的图像名称