【问题标题】:How to read images from MySQL database using PHP?如何使用 PHP 从 MySQL 数据库中读取图像?
【发布时间】:2011-09-16 21:45:42
【问题描述】:

如何使用 PHP 从 MySQL 数据库中读取图像?

如果图像存储在数据库中的 BLOB 中,如何使用我得到的二进制数据并使用 src 将其转换为图像 <img> 还是使用 CSS 属性 background-image

谢谢。

【问题讨论】:

  • 认真考虑将图像作为 BLOB 从数据库中移出,并将它们本地存储在文件系统中。如果多台机器需要访问同一个映像,请考虑跨机器挂载的共享资源。
  • 好的,非常感谢-------------------------

标签: php mysql image


【解决方案1】:

直接使用二进制数据作为图片源,可以使用data URI scheme,例如:

$uri = 'data:image/png;base64,'.base64_encode($row['binary-data']);

这个 URI 可以直接用作图像的来源:

background-image: url(<?php echo $uri; ?>)
<img src="<?php echo $uri; ?>">

但这有一些明显的缺点:除了在旧浏览器中缺乏对这些 data URI 的支持之外,data URIs do also have disadvantaged regarding payload, caching, and references

【讨论】:

    【解决方案2】:

    如果将图像存储为 BLOB,您可能应该做的是提供一个 URL,该 URL 以一种可以确定要返回什么图像的方式调用您的脚本。

    将该 URL 用作 srcbackground-image: url(...),并在脚本中将 BLOB 从数据库中读取到变量中。

    然后在适当的头信息后输出变量,告诉浏览器它要接收图像,例如:

    header('Content-Type: image/jpeg');
    

    发送Content-Length 标头和有关缓存/到期的合理信息也是明智之举。


    注意。说了这么多,我倾向于对在数据库中使用 BLOB 保持警惕,它们往往会削弱性能。当我想存储图像时,我将它们存储在一些目录结构中,并以某种方式在数据库中引用它们。

    【讨论】:

    • 非常感谢,我明白了这个概念,但仍然错过了我从 src 调用的那个脚本中将会发生的事情。
    • 我关于 stackoverflow 的最新问题之一是如何执行您刚才提到的操作,将图像存储在文件系统上并在需要时调用它。如果构建通用和可配置的 cms,我如何使用数据库中的某些项目引用图像,例如数据库中新闻表中的新闻项目。
    • @SonOfOmer:这真的取决于目的,如果您有新闻文章,您是在每篇文章中存储多个图像,还是仅存储一个?如果只是一个,则为文章图像留出一个目录,并使用新闻表 ID 作为文件名,并带有适当的扩展名。然后您可以将图像宽度/高度/格式存储在数据库中,并使用它来填充&lt;img&gt; 标记的值。如果不止一个,则保留另一个表格,列出每个图像的信息,并带有序列 ID,并将它们存储为 &lt;articleID&gt;_&lt;seqID&gt;.ext,或者将它们放在每篇文章的目录中。
    • @SonOfOmer:您从src 调用的脚本需要在URL 本身中有足够的参数来识别您想要的数据库中的BLOB。然后只需使用 SELECT 查询将 BLOB 值放入字符串中。输出 Content-TypeContent-Length 标头值,然后回显作为查询结果返回的 BLOB 值。最后退出脚本。确保在标题之后根本没有发送其他文本(BLOB 除外),而不是一个字符。
    • 您也可以考虑替代图像存储方法:文件系统、S3、CouchDB 等。
    猜你喜欢
    • 2014-08-20
    • 2012-07-16
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多