【问题标题】:How to store image files in the backend of a site如何在网站后端存储图像文件
【发布时间】:2012-03-05 06:50:59
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: php mysql sql web phpmyadmin


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      1. 交易安全。如果用户编辑了他的个人资料(照片和出生日期),那么要么两者都被保存,要么在回滚/错误的情况下都不保存。

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

      但是,由于很多陷阱,我不推荐它,尤其是不要使用 PHP & MySQL。 MySQL 不支持流式传输,因此如果文件很大,您将耗尽所有内存。

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

      阅读:

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

      Storing Documents as Blobs in a Database - Any disadvantages?

      【讨论】:

        【解决方案3】:

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

        您可以创建一个目录 /cache/pictures/$id_$width_$height.jpg 并将它们存储在那里。 并且仅在未找到 $id_$width_$height 时创建新图像。

        【讨论】:

          【解决方案4】:

          我个人不建议将文件存储在数据库本身中。我会存储对文件位置的引用,以便将来在必要时通过镜像等进行扩展。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-09-21
            • 2016-01-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-28
            • 1970-01-01
            • 2012-07-09
            相关资源
            最近更新 更多