【问题标题】:displaying an image stored in a mysql blob显示存储在 mysql blob 中的图像
【发布时间】:2011-07-28 09:42:21
【问题描述】:

当我运行下面的代码时,它会显示存储在 mysql Db 中的图像作为 blob 变量。问题是如果我回显其他任何内容,即使是像 echo '--------' 这样简单的内容;在我调用图像之前,图像不会显示。只显示随机字符。如果我在图像显示之后回显出任何内容,但之后什么都没有。谁能告诉我为什么会这样以及如何将其他项目和图像一起显示,谢谢

<?php

include("inc/library.php");

connectToDatabase();

$sql = "SELECT * FROM theBlogs WHERE ID = 1;";

$result = mysql_query($sql) or die(mysql_error());  
$row = mysql_fetch_array($result);

header("Content-type: image/jpeg");
echo $row['imageContent'];
$db->close();

?>

【问题讨论】:

  • 谢谢你的问题帮助了我。使用标题后我的图像没有显示,现在我知道了,因为我正在回显其他文本:)

标签: php mysql blob


【解决方案1】:

您可以将图像数据转换为 base64 并将其粘贴在 &lt;img&gt; 标记中。目前,您正尝试在图像数据之外写入文本,而 Internet 浏览器认为您的文本是图像的一部分,因此会引发错误。

试试这样的:

echo '<img src="data:image/jpeg;base64,' . base64_encode( $row['imageContent'] ) . '" />';
echo 'Hello world.';

请注意,这不是最佳解决方案,因为它无法缓存并且速度相当慢,尤其是在手机上。查看caniuse for data URIs

【讨论】:

    【解决方案2】:

    嗯...为什么它会执行您所描述的操作的答案是因为您使用了 header() 函数。在 PHP 中,您不能在标头调用之前打印任何内容,因为这会指示 Web 服务器准备内容标头。通常这些内容会完全取代所有内容。

    其次,我想提一下,将图像存储在数据库中通常是一个坏主意,原因有两个。

    1. 它对性能和渲染有重大影响。
    2. 您必须编写代码来呈现 blob 数据,而不仅仅是显示图像本身。

    数据库驱动的图像呈现的首选方法是将图像存储在一个目录中,并将它们的文件名存储在数据库中。现在,当您希望显示图像时,您只需要轮询 DB 以获取要显示的文件名,然后简单地将文件名包含到 HTML 属性中。

    执行速度也快得多。

    另外,我想指出,如果您希望让脚本实际进行渲染,您会希望该脚本定义您的标题,然后在您定义标题后回显或打印图像 blob。

    请注意,当您创建 html 标记时...在 src 属性中,您会使其更像这样;

    <img src="image.php?id=<some_number>">
    

    现在,您的 image.php 文件会将图像数据吐出到标签中。

    【讨论】:

      【解决方案3】:

      只是一个想法,也许您可​​以将显示图像的逻辑与内容分开。我的意思是你可以创建一个像 pic.php 这样接受 id/filename 的文件(不确定你是使用文件名还是 id 来引用图像),然后显示图像。然后,您可以简单地引用 HTML 中的图像,例如执行以下操作:

      <p>my content</p>
      <img src="pic.php?picid=1" />
      <p>my Other Content</p>
      

      【讨论】:

        猜你喜欢
        • 2013-07-19
        • 2012-10-24
        • 2018-10-07
        • 2017-04-28
        • 2014-01-05
        • 2015-01-22
        • 1970-01-01
        • 2014-08-05
        • 2015-09-04
        相关资源
        最近更新 更多