使用PHP从MySQL检索图像

时间:2012-03-18 16:47:29

标签: php mysql http

我理解关于是否将图像存储在数据库中的争论,但我现在仍然坚持使用这种设计。我也知道,为了显示目的,将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>';
}

4 个答案:

答案 0 :(得分:3)

如果您没有存储图像类型,则存储原始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>";

答案 1 :(得分:1)

如果您知道图片的类型,可以使用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']
);

答案 2 :(得分:1)

<?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'];
?>

答案 3 :(得分:0)

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