【问题标题】:Retrieving Image from MySQL with PHP使用 PHP 从 MySQL 中检索图像
【发布时间】:2012-03-18 16:47:28
【问题描述】:

我理解关于是否将图像存储在数据库中的争论,但我现在坚持这种设计。我还知道,关于将 MySQL BLOB 拉到单独的 php 文件中以供显示目的,这个主题已经被讨论了一千次。我的问题有点狭窄,我在任何地方都没有看到。

我将图像结果从我的数据库循环到显示文件描述和上传日期的 HTML 表中。我想要的只是超链接的文件描述,因此当我的用户单击它时,会显示实际图像。我在另一个脚本中可以正常工作,他们从下拉列表中选择图像并将信息发布到另一个脚本。出于某种原因,我对如何从简单的超链接显示图像感到困惑。我正在尝试这样做,但它会在页面上显示所有 BLOB 数据。有人可以指出我正确的方向吗?

while ($row = mysql_fetch_array($answer1)) {
    echo '<tr>';
    echo "<td><input name='checkbox[]' type='checkbox' id='checkbox[]' value='$row[imageven_id]'></td>";
    echo "<td><a href='$row[file_data]')'>$row[upload_name]</a></td>";
    echo "<td>$row[image_category]</td>";
    echo "<td>$row[upload_date]</td>";
    echo '</tr>';
}

【问题讨论】:

  • 你能发布一个你的mysql结果的示例行吗?
  • 谢谢大家,这很容易解决。对于其他正在寻找解决方案的人,请更改:codeecho "$row[upload_name]";收件人: echo "$row[upload_name]";

标签: php mysql http


【解决方案1】:

如果您没有在某处存储图像类型,那么存储原始 blob 数据会非常复杂。我希望您已经修复了系统接受的图像类型,或者也将图像类型存储在表中的某个位置。

无论如何,当您在浏览器中使用 blob 数据显示图像时,您需要知道图像类型。创建一个单独的页面以仅显示图像。例如创建showimage.php。在此页面上编写以下代码

$id= abs($_GET['id']);
$query = mysql_query("SELECT file_data FROM imagetable WHERE id='$id'");
$data=mysql_fetch_array($query);

header('Content-type: image/jpg'); //This is where we need to know the image type
echo $data['file_data'];

现在,您可以链接到此页面以显示图像,以这种方式

echo "<a href='showimage.php?id=".$row['id']."'>".$row['upload_name']."</a>";

【讨论】:

  • 感谢 Starx,这正是我所采用的答案。完美的解释。
【解决方案2】:

如果你知道图片的类型,可以使用data URI scheme

function data_uri($contents, $mime) {
    $base64 = base64_encode($contents);
    return "data:$mime;base64,$base64";
}

echo sprintf(
    '<img src="%s" alt="%s" />',
    data_uri($row['file_data'], 'image/png'),
    $row['upload_name']
);

【讨论】:

  • +1 我也打算建议一个数据URI,但如果图像是一个单独的HTTP请求,还不如直接转储。
【解决方案3】:
<?php
header("Content-Type: image/jpeg"); // we'll assume

// pass the row ID based upon your example, this appears to be it.
$imageven_id = $_GET["imageven_id"]

// do the same query you did above, then
// keep in mind this variable is in memory, hope your images are
// not too large.
print $row['file_data'];
?>

【讨论】:

    【解决方案4】:

    $row[file_data] 将是文件本身的原始数据,而不是显示该数据的脚本的链接。修复它。 :)

    【讨论】:

    • 好的,所以我的想法是我仍在链接到那个外部脚本。也许是这样的:
    • echo "$row[upload_name]";传输图片ID的_GET?
    猜你喜欢
    • 2011-08-25
    • 2015-05-31
    • 1970-01-01
    • 2019-09-22
    • 2018-06-08
    • 1970-01-01
    • 2012-08-05
    • 2016-01-07
    • 2013-09-26
    相关资源
    最近更新 更多