header(“Content-Type:image / jpeg”);返回破碎的图像

时间:2013-04-15 22:42:10

标签: php mysql pdo

我从我的数据库中获取blob图像,但它返回已损坏。

如果我删除header("Content-Type: image/jpeg");

它返回文件扩展名应该是因为它是一个PNG文件

‰PNG  IHDR\r¨fÆÉIDAT

问题是什么? 是的。我尝试了header("Content-Type: image/png");

我尝试过ob_start和ob_end_flush();

代码

  ob_start();

    $query = $db->query("SELECT `image` FROM `userdetails` WHERE id = '{$_SESSION['uid']}' ");
    $row = $query->fetch(PDO::FETCH_ASSOC);

    echo $row['image'];


    header("Content-Type: image/jpeg");
    ob_end_flush();

感谢

2 个答案:

答案 0 :(得分:1)

你在问题​​中提出的问题受到许多参数的影响,我担心你的问题会发生 - 如果有的话 - 只抓一些参数。

突然出现的是PNG标题:

‰PNG  IHDR\r¨fÆÉIDAT

看起来并不破碎。因此,您可能确实存在将图像存储到数据库中的问题。也许数据被截断/修改了,这种变化没被注意到了?

解决这个问题的一种方法是在将文件放入blob之前创建文件的校验和,以便稍后验证数据的完整性。

答案 1 :(得分:1)

您需要在图像数据之前输出标题,而不是之后:

header("Content-Type: image/png");
echo $row['image'];