如何将图像文件存储在站点的后端

时间:2012-02-13 20:51:07

标签: php mysql sql web phpmyadmin

我正在建立一个网站,并且刚刚开始开发后端。

我的网站的重点是向访问者显示图片。出于开发目的,我想在上线之前先测试所有内容。

我想知道存储这些图像的最佳方式是什么。我刚刚完成了我的Wamp服务器的设置,并添加了一个带有phpMyAdmin的新数据库。我发现我可以将每个图像作为BLOB数据类型直接存储在mySQL数据库中。但这是最好的方式吗?

谢谢!

4 个答案:

答案 0 :(得分:7)

这绝对不是要走的路。然后,您需要在PHP中将blob 保留在内存中,然后再将其发送到浏览器。

更好的方法是将图像存储为文件系统中的文件,并将文件名存储在数据库中。这样,您可以将服务的整个图像卸载到Web服务器,并且不会在文件的HTTP请求中涉及PHP。

答案 1 :(得分:5)

将文件存储到数据库有两个主要优点:

  1. 交易安全。如果用户编辑了他的个人资料(图片和出生日期),则两者都会被保存,或者两者都不会出现回滚/错误。

  2. 只需一个备份点。您不会忘记备份包含用户头像的目录。

  3. 然而,由于存在许多陷阱,我不推荐它,特别是不使用PHP& MySQL的。 MySQL不支持流式传输,所以如果文件很大,你就会用掉你所有的ram。

    文件系统无疑是最快,最自然的方式。它的开销最小,资源最少。

    读:

    Storing a file in a database as opposed to the file system?

    Storing Documents as Blobs in a Database - Any disadvantages?

答案 2 :(得分:0)

您可以将它们存储在数据库中,然后轻松操作图像。例如,您可以从数据库中获取原始图像并在不同大小(使用imagick)上创建多个缓存图像(在磁盘上),并在网站中显示它们。如果您正在使用数据库,则在拍摄图像时应使用延迟加载(仅在您需要时加载内容)否则mysql将使您的服务器崩溃。 :)

你可以制作一个目录/cache/pictures/$id_$width_$height.jpg,并将它们存储在那里。 仅在找不到$ id_ $ width_ $ height时才创建新图像。

答案 3 :(得分:0)

我个人不建议将文件存储在数据库中。我会存储对文件位置的引用,以便将来可以通过镜像等进行缩放。