数据库中的图像不会显示,标题已经发送

时间:2014-01-14 21:12:37

标签: php image header

$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">';
}

这是我用于显示上传到我的数据库的图像的代码...但是,我收到错误消息,标题已经发送...我不知道我做错了什么!

我可以在我的网站上看到我的图像应该是什么但没有实际图像!

3 个答案:

答案 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;不需要标题。

此外,mysql已弃用;请改用mysqliPDO

答案 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标题,然后回显单个图像的内容。