$sql="SELECT * FROM `blob` ";
$query=mysql_query($sql);
while($row=mysql_fetch_array($query)) {
$image=$row ['image'];
header("content-type: image/jpg");
echo '<img src="path/'.$image.'" width="360" height="150">';
}
这是我用于显示上传到我的数据库的图像的代码...但是,我收到错误消息,标题已经发送...我不知道我做错了什么!
我可以在我的网站上看到我的图像应该是什么但没有实际图像!
答案 0 :(得分:0)
一般情况下: 当您收到此消息时,似乎之前已完成输出。它甚至可以是一个简单的“空白”字符,如[:space:]。
<强>可是:强> 除此之外,你似乎有些不对劲。您确实创建了HTML(!)但是发送了一个标题消息,告诉浏览器它获取图像的二进制数据。
因此,当您在数据库中确实拥有二进制数据时,您必须输出二进制数据而不是任何html“thingy”。我真的建议你阅读一本关于服务器如何工作以及标题(..)实际工作的好书。
请看这里:
PS:我没有详细介绍你的问题,也没有提供解决方案,因为我认为这不会对你有所帮助,而不是暂时解决这个误解问题。
答案 1 :(得分:0)
你的代码完全错了;将图像存储在MySQL数据库中是一个坏主意,并且您正在使用图像数据作为不存在图像的路径;如果你仍然想坚持在数据库中拥有图像的想法,这里的示例代码将起作用:
while ($row = mysql_fetch_array($query)) {
echo '<img src="data:image/jpeg;base64,'.base64_encode($row["image"]).'" />';
}
将图像编码为base64,然后将其用作img
内的data URI;不需要标题。
答案 2 :(得分:-2)
问题是你是在while循环中进行的,它将被执行多次:
while($row=mysql_fetch_array($query)) {
$image=$row ['image'];
header("content-type: image/jpg"); // Headers are sent here
echo '<img src="path/'.$image.'" width="360" height="150">'; // Content here
}
当混合这样的标题时,您通常要做的是将标题放在任何内容之前。但是在你的情况下,这也没有意义,因为你发送的是"content-type: image/jpg"
。如果使用HTML将图像回显到浏览器,则内容类型应为text/html
(默认情况下由PHP发送)。所以完全放弃这条线。如果您尝试发送图像的实际二进制内容,则不会使用HTML标记,只需发送Content-Type
标题,然后回显单个图像的内容。