【问题标题】:Can not retrieve a jpg image using php无法使用php检索jpg图像
【发布时间】:2011-09-06 21:58:01
【问题描述】:

我正在从 oracle 数据库中检索 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);

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

如果我添加一个文件处理标题并提示用户保存图像,当我打开它时它仍然不显示图像。

所以打印数据和浏览器接收数据之间似乎存在问题,尽管我不知道问题可能是什么。

有人有想法吗?

【问题讨论】:

    标签: php oracle http


    【解决方案1】:

    尝试添加 Content-Length 标头。您应该从数据库中检索 $mylob_length,因为每次检查它可能会减慢速度:

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

    【讨论】:

      【解决方案2】:

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

      特别是检查

      • Byte Order Mark 在您打开 <?php 标签之前
      • 脚本和任何其他包含的脚本的尾随空格。解决此问题的最简单方法是省略结束 ?> 标记,或者更好的是,在回显图像数据后执行 exit;

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

      【讨论】:

      • 这解决了它,谢谢!原来我有一些尾随空格,我什至没有想过要检查。摆脱了那些并添加了一个出口;很好的衡量标准。
      猜你喜欢
      • 2014-05-25
      • 1970-01-01
      • 2023-04-06
      • 2019-09-22
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2018-08-13
      • 2020-04-22
      相关资源
      最近更新 更多