【问题标题】:PHP display image from Database(medium blob)来自数据库的 PHP 显示图像(中等 blob)
【发布时间】:2012-02-03 12:46:35
【问题描述】:

我目前有一个数据库,我可以在其中存储图像.. 但是我为显示它们而创建的 PHP 页面......不起作用。 但是,当我将链接用作 的 scr 时,它会显示一个空的图像帧。 如果我直接回显图像,我会得到很多奇怪的迹象

我想要显示图像的方式是:

我用于显示图像的代码(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)

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

有人可以帮我吗?

感谢您的宝贵时间!

【问题讨论】:

  • 为什么要将图像存储在数据库中?将文件存储在文件系统中并引用该文件在数据库中的路径不是更有意义吗?

标签: php mysql image blob


【解决方案1】:
$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;

【讨论】:

    【解决方案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 和框架。

    【讨论】:

    • 我当前使用的代码来自其他人,它的 $content = file_get_contents($tmpName); $data = unpack("H*hex", $content ); $mycontent = '0x'.$data['hex'];效果很好,尺寸也不错……
    • 我以前从未见过这样做过。尝试使用我的方法,然后保存有问题的图像并尝试查看它。
    • 我得到的是nac-verkeerscholen.nl/test/image.php?image=9 不知道是对还是错...但它与初始图像不同...
    【解决方案3】:

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

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

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

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

    尝试查看内容类型。我认为它区分大小写。尝试内容类型。 http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

    【讨论】:

    • 好吧,我现在得到的字符串大小合适,但如果我尝试将其粘贴到 txt 中,并将 txt 转换为图像格式,它是......它不会工作。您说“支持二进制 blob 的存储”,您的意思是 blob(太小)还是二进制数据类型。并且没有图像转换,多种形式的图像存储在数据库中(连同它们的图像类型)只是试图显示一些东西......感谢您的帮助;)
    • 使用一些 MySQL 工具,你可以拉下一个图像字符串并将其与检索到的字符串进行比较吗?他们是一样的吗?你能举一个你正在使用的内容类型的例子吗?
    • 好吧,我把绳子拉下来了……它与我打开它时的图像不同。由于图像有很多未知字符,而来自数据库的图像具有所有已知字符......这是 ANSI 或其他东西之间的差异?
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2019-07-05
    • 2013-06-12
    • 2015-05-03
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多