如何从mysql blob中显示图像

时间:2009-11-19 03:43:41

标签: php mysql blob

我正在尝试显示MySQL blob字段中的图像。我尝试了一些不同的东西,但似乎都没有。

我试过了:

  • header("Content-type: $type"); img src = $blobData;

  • header("Content-type: $type"); echo($blobData);

4 个答案:

答案 0 :(得分:3)

<?php
  header("Content-type: $type");
  echo $blobData;
?>

此代码看起来非常好。但是,我听到了另一个人的类似抱怨,我通过确保:

来解决问题
  1. php脚本在发送二进制图像数据之前或之后不会输出任何额外字符。

  2. php脚本保存为纯ASCII文本文件,而不是Unicode / UTF-8编码文件。 Unicode / UTF-8编码的PHP文件可能包含签名作为第一个字节。这些字节在文本编辑器中是不可见的,但服务器会在JPEG / GIF / PNG数据之前将这些额外的字节发送到浏览器。因此,浏览器将在数据开头找到错误的签名。要解决此问题,请在记事本中创建一个空白文本文件,粘贴php代码并以ANSI编码保存文件。

答案 1 :(得分:1)

我认为您遇到的问题是编码问题。此资源声称您可以使用the print function.

答案 2 :(得分:1)

您可以考虑的另一个选项(假设您使用的是Apache):

为所有图片扩展程序(png,jpg,gif)创建.htaccess mod_rewrite个文件。

让它重定向到查找数据库中请求的图像的php脚本。如果它在那里,它会回显标题和博客。如果不存在,则返回标准404。

这样你就可以:

<img src="adorablepuppy.jpg" />

然后重定向ala:

RewriteEngine on
RewriteRule \.(gif|jpg|png)$ imagelookup.php

此脚本对图像进行查询,显然假设所请求的图像具有与URL中的文件名匹配的唯一键:

 $url = $_SERVER['REQUEST_URI'];
 $url_parts = explode("/", $url);
 $image_name = array_pop($url_parts);

现在你只有图像文件名。查询(我将留给您,以及任何验证方法和检查地址中的真实文件等)。

如果出现结果:

 header('Content-type: image/jpeg');
 header('Content-Disposition: inline; filename="adorablepuppy.jpg"');
 print($image_blog);

否则:

 header("HTTP/1.0 404 Not Found");

仅供参考:我不知道这在性能方面是否会不好。但是它可以让你做我认为你想要的东西,它输出的图像好像它是一个平面图像文件在服务器上使用一个简单的image元素。我倾向于同意BLOB不是最好的方法,但这确实避免了任何跨浏览器的问题。

答案 3 :(得分:0)

只需从数据库中获取图像。并使用正确的标题打印它。

$image = mysql_fetch_array(...)
header("Content-type: image/jpeg"); // change it to the right extension 
print $image['data'];

出于性能原因......这是不可取的。将图像放入数据库有几个原因,但最常见的是:

a)将它们编入索引(呃!)
您可以通过将图像平放在服务器上并仅索引图像文件名来完成此操作。

b)保持图像隐藏/受保护
Flickr等仍然将图像平放在服务器上并使用不同的方法。他们生成了一个很难找到的URL。

我帐户中的link points to a protected image。一旦知道正确的URL,您仍然可以访问它。试试吧!

farm2.static - 为提供静态内容而优化的服务器场 1399 - 也许服务器
862145282 - 我的用户名
bf83f25865_b - 图片

为了找到我所有的秘密图像,任何用户都可以用上述地址轻击Flickr并更改最后一部分。但这需要很长时间,并且用户可能会被阻止用数千个404敲击服务器。

那说没有理由在BLOB上存储图像。

修改:只是指向某人的链接,该链接在存储图片时比我why BLOB is not the way to go解释得更好。