显示存储在mysql blob中的图像

当我运行下面的代码时,它显示一个图像,存储在一个MySQL Db作为一​​个BLOBvariables。 问题是如果我回应其他的东西,甚至像回声“——–”一样简单; 在我调用图像之前,图像将不会显示。 只有随机字符显示。 如果我在图像后显示的图像回显任何东西,但没有任何后。 有人可以告诉我为什么这是,我怎么可以去显示其他项目和图像在一起,谢谢

<?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(); ?> 

您可以将图像数据转换为base64,并将其粘贴在<img>标签中。 目前,您正试图在图像数据之外编写文本,因特网浏览器认为您的文本是图像的一部分,因此会引发错误。

尝试这样的事情:

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

请注意,这不是最好的解决scheme,因为它无法caching,而且速度相当慢,特别是在手机上。 检查数据URI的caniuse 。

那么…为什么它会做你所描述的答案是因为你使用的header()函数。 在PHP中,您不能在标题调用之前打印任何内容,因为这会指示Web服务器准备内容标题。 通常这些将完全取代所有的内容。

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

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

数据库驱动的图像显示的首选方法是将图像存储在目录中,并将其文件名存储在数据库中。 现在,当您希望显示图像时,只需要轮询数据库以查看要显示的文件名,然后只需将文件名包含在HTML属性中即可。

执行速度也快得多。

另外,我想指出的是,如果您希望有一个脚本实际执行渲染,那么您需要该脚本定义您的标题,然后在定义标题之后回显或打印图像blob。

请注意,当你创build你的html标签…在src属性中,你会做出更像这样的东西;

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

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

只是一个想法,也许你可以分开逻辑显示内容的形象。 我的意思是你可以创build一个像pic.php这样的文件来接受id / filename(不知道是否使用文件名或id来引用图片),然后显示图片。 然后,你可以简单地在你的HTML中引用图像,例如做这样的事情:

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