PHP显示来自数据库的图像(中等blob)

时间:2012-01-05 17:25:23

标签: php mysql image blob

我目前有一个数据库,我可以存储图像.. 但我创建的PHP页面显示它们......不起作用。 但当我使用链接作为scr的< IMG>它显示一个空的图像框架。 如果我直接回应图像,我会得到许多奇怪的迹象

我想要显示图像的方式是:     < img src =“image.php?image =”'。$ imageID。'/>

我用于显示图像的代码(image.php)是:

 <?php session_start();
 if(!isset($_GET['image']))
 {
     header("HTTP/1.0 404 Not Found");
 }
 else{
     $link = mysql_connect('localhost', '45345345435435345', 'wewfsersdfds');
            if (!$link) {
                echo "error";
                die;
            }

            $db_selected = mysql_select_db(Tha base, $link);
            if (!$db_selected) {
                echo "error";
                die;
            }
 $nummer=(int)trim(stripslashes($_GET['image']));
 $mynr=$nummer;
 $sql="SELECT * FROM Foto WHERE fotonr=$mynr";
 $result=mysql_query($sql);
 if(!$result)
 {
     echo "error".mysql_error();
     header("HTTP/1.0 404 Not Found");
 }
 else
 {

     $foto = mysql_fetch_assoc($result);

     header("Content-type: ".$foto['type']);
     echo $foto['image'];


 }
 }
 ?>

我已经尝试了很多但它不会工作:( 我将代码更新到最新版本。 用sql犯错(没有选择/永远不会做一个int的mysql_real_escape_string)

现在它显示的是一行直线而不是图像,这至少是一种改进......

有人可以帮助我吗?

Thanx你的时间!

3 个答案:

答案 0 :(得分:2)

我怀疑你的问题出在你的转换中 - 可能是在字符串和图像之间,或者是在不同的图像格式之间。

您是否尝试过保存通过image.php获取的图像,并将二进制文件与已知良好的图像文件进行比较?也许一旦你这样做,答案就会很明显(例如错误的长度,错误的标题等)

您可能需要考虑不同的数据库记录。大多数db支持存储二进制blob数据,您可以更简单地返回。这比使用php函数stringify和imagecreatefromstring更简单(并且在db中占用更少的空间!)。

此外,我相信您正在尝试使用imagegif,imagejpeg,images来为您执行图像格式转换。根据我在http://php.net/manual/en/function.imagecreatefromstring.php上的阅读,这不是我理解它们的工作方式。尝试存储和检索相同的格式,以梳理出这是否是您的问题。

尝试查看内容类型。我认为这是区分大小写的。尝试Content-Type。 http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

答案 1 :(得分:2)

老实说,我知道这可能很棘手。我认为这与你如何存储它有关,而不是如何输出它。我有一个最近可以展示的项目的存储示例。

$fp = fopen($image_path, 'r');
$image = fread($fp, filesize($image_path));
$image = addslashes($image);
fclose($fp);

// save $image into DB.

不确定您是否与file_get_contents类似。我的输出方式类似于你的方式,只使用ORM和框架。

答案 2 :(得分:0)

$sql = "SELECT * FROM Foto WHERE fotonr=$mynr";
        $result = $conn -> query($sql);
        while ($row = $result -> fetch_assoc()) {
        $img= '<img src="data:image/jpeg;base64,'.base64_encode(                        $row['image'] ).'"  width=350px0px height=300px/>';
}
echo $img;