使用PHP显示存储在数据库中的图像

时间:2014-03-24 17:29:27

标签: php

对于我目前的作业,我正在尝试将文件存储到数据库中并显示它们。目前我存储文件没有问题,但我无法正确显示它们。我正在以我的主要形式使用它。

<td><a href=getImage.php?id='.$file[0].'"  />Resume</a></td>

这是我用来从DB中获取文件的查询。

  $sql = "SELECT file FROM table WHERE Res_ID=$referenced_ID";
  $result = mysqli_query($dbc, $sql);
  $row = mysqli_fetch_assoc($result);

header('Content-type: image/jpg');
     echo "<img src=\"{$row['file']}\" /><br />";

结果是

  

...³V!μ0¢ošweöÿZ-îÌèEÈÎpEJ·~kä€òþòâGas   E * g ^¥vA¤uEN¤S]‰:NY“!iwØ8‡¥E]ØÝGÑ'øQÍ«3¨ÄvÙÁu§]zÕÿOã^ssÌuáY7WP“ÔT6Æà™ëâþÊQËüioe8   ?9ô5ãÛSÇÔ'RÃâ>~VCBh¹&GT;ϳ=BïÃVwåçÔW#¯| 8†ufŠ4ob1PiÞ= Q(,&GT;μÐYx®Æ÷¥ò>Ñ5b½äy6«ðÆbͲϡ®fóá-   I“ξ<”xvîYVEöæ«6§] |²½ýj‡I#åËßjv™-k.u \ SE>!O-#óЊúÊmcLþ-¹ïšÆÔ4ïkùñE¸ÿ0h±j§'òù   Ô켯íº×AYA /克:»¸âïþ=³-²ûáHÑI3ŒKÙW¨ÍNºŽî-¶_Ã@ IU {TIU&gt;一种€3ÿu7@ V [àüš'í•UT [9 \Ó'ªOCJ? ©ù...69Ùxß÷¹©ö¼   |ÊOμ°™W#@êàÔ²iw®»-uõ5Eíåà«ôÅH䯓'\ PUZ&GT;ïÖœÖò'¡÷†^ Z @ 3SG +ÀéYžt±UBG&GT; =&H'ÞBgt;”中À¾7ƒè)É#)ASU×S‰‡ R&GT;μ“\£O4

我现在正在使用图像作为样本,但完成的php最终应该允许显示PDF文档。如果有任何帮助我正在使用phpmyadmin和MySQLi。

2 个答案:

答案 0 :(得分:1)

正如评论所示,将文件位置存储在数据库中要比将文件的数据存储在数据库中要好得多。但是如果由于某种原因需要将文件内容存储在数据库中,有两种方法。一个是使用HTML数据:URL,另一个是将PHP文件作为中间人。

对于PHP Middle Man方法,请查看上面的答案,它设置标题信息,然后回显文件内容。文件扩展名无关紧要,因为浏览器引用内容类型标头而不是文件扩展名。

对于可以直接放在代码中的数据网址方法,请查看http://en.wikipedia.org/wiki/Data_URI_scheme

<?php
    // Array of valid Mime Types, prevents possible XSS methods.
    $valid_mimes = array(
        'image/png',
        'image/gif',
        'image/jpeg'
    );

    // Obtain Mime Type using finfo
    // Finfo allows for strings instead of file path
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mime = $finfo->buffer($row['file']);

    // Check if mime is in our $valid_mimes array
    if(!in_array($mime,$valid_mimes)) {
        // Handle Error
        echo 'Illegal Mime Type: '.$mime;
        die();
    }

    $b64 = base64_encode($row['file']);
    echo '<img src="data:'.$mime.';base64,'.$b64.'" />';
?>

答案 1 :(得分:0)

你不能输出<img src=\作为输出它会破坏图像文件和 请使用getImage.php作为不同的文件输出图像,或确认在图像之前,之后或之中没有打印输出,否则会损坏图像。

if(isset($_GET['id'])){
$sql = "SELECT file FROM table WHERE Res_ID=$referenced_ID";
  $result = mysqli_query($dbc, $sql);
  $row = mysqli_fetch_assoc($result);

header('Content-type: image/jpg');
echo $row['file'];
}