无法使用php检索jpg图像

时间:2011-06-02 08:26:11

标签: php oracle http

我正在从oracle db中检索jpg文件,并尝试使用echo命令输出它。 jpg文件作为blob存储在数据库中,并在从数据库访问时正确显示。以下是相关代码:

$query = 'select * from answer where answer_id = :answer_id';

$stmt = oci_parse($conn, $query);

oci_bind_by_name($stmt, ':answer_id', $answer_id);

oci_execute($stmt);


if ($row = oci_fetch_array($stmt, OCI_BOTH)){

    header('Content-type: image/jpeg');

    $mylob =  $row['ANS_PICTURE']->load();
    echo $mylob;

}

这会发送与文件大小一致的数据量,但浏览器完全无法将其解释为图像。

奇怪的是,当我使用

$fp = fopen('test.jpg', 'w');
fwrite($fp, $mylob);

我可以保存文件,即使使用浏览器通过服务器打开图像也可以显示图像。

如果我添加文件处置标题并提示用户保存图像,则在打开图像时它仍然不会显示图像。

所以看起来打印数据和接收数据的浏览器之间存在问题,但我不知道问题是什么。

有人有想法吗?

2 个答案:

答案 0 :(得分:0)

检查可能在图像数据之前或之后偷偷摸摸的任何额外输出。

特别要检查

  • 在您打开<?php代码
  • 之前Byte Order Mark
  • 在脚本和任何其他包含的脚本上尾随空白。最简单的方法是省略关闭?>标记,甚至更好,在回显图像数据后执行exit;

最后,这可能根本没有效果,但我相信正确的标题名称是Content-Type(大写“C”,大写“T”)。

答案 1 :(得分:0)

尝试添加Content-Length标头。你应该从数据库中检索$ mylob_length,因为每次检查它都会变慢:

header('Content-Length: ' . $mylob_length);