我正在从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);
我可以保存文件,即使使用浏览器通过服务器打开图像也可以显示图像。
如果我添加文件处置标题并提示用户保存图像,则在打开图像时它仍然不会显示图像。
所以看起来打印数据和接收数据的浏览器之间存在问题,但我不知道问题是什么。
有人有想法吗?
答案 0 :(得分:0)
检查可能在图像数据之前或之后偷偷摸摸的任何额外输出。
特别要检查
<?php
代码?>
标记,甚至更好,在回显图像数据后执行exit;
。最后,这可能根本没有效果,但我相信正确的标题名称是Content-Type
(大写“C”,大写“T”)。
答案 1 :(得分:0)
尝试添加Content-Length标头。你应该从数据库中检索$ mylob_length,因为每次检查它都会变慢:
header('Content-Length: ' . $mylob_length);