Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何显示数据库中的图像?_Php_Mysql - Fatal编程技术网

Php 如何显示数据库中的图像?

Php 如何显示数据库中的图像?,php,mysql,Php,Mysql,在php中,无法从数据库显示图像,这是一个错误。 当我执行这段代码时,出现了这样的错误,图像无法显示,因为它包含错误。图像存储在mysql数据库中,字段类型为BLOB。它没有找到任何解决方案来避免这个错误 <?php require_once('database/db.class.php'); $objDatabase=new db_class(); $objDatabase->connect(); $sql="SELECT id,firstname,lastname,sex,ema

在php中,无法从数据库显示图像,这是一个错误。 当我执行这段代码时,出现了这样的错误,图像无法显示,因为它包含错误。图像存储在mysql数据库中,字段类型为BLOB。它没有找到任何解决方案来避免这个错误

<?php
require_once('database/db.class.php');
$objDatabase=new db_class();
$objDatabase->connect();
$sql="SELECT id,firstname,lastname,sex,email,userimage,ext,city,state,username FROM t_users WHERE username='".$_SESSION['username']."'";
$totalRow=$objDatabase->select($sql);
if($row=$objDatabase->get_row($totalRow, 'MYSQL_BOTH'))
    {
        $userArray=array('id'=>$row['id'],'firstname'=>$row['firstname'],'lastname'=>$row['lastname'],'sex'=>$row['sex'],'email'=>$row['email'],'userimage'=>$row['userimage'],'ext'=>$row['ext'],'city'=>$row['city'],'state'=>$row['state'],'username'=>$row['username']);
    }

?>


  <table cellspacing="10px" width="100%">
  <tr>
  <td width="23%" style="vertical-align:top">
  <?php
    header("Content-type: image/{$userArray['ext']}");
    header("Content-Length: " . strlen($userArray['userimage']));
    echo  $userArray['userimage'];
  ?>
 </td>
</tr>
</table>

好吧,这不是解决问题的方法,只需按常规存储图像,然后将路径存储在数据库中

如果您确实想这样做,您需要创建一个名为image.php的新文件,然后将

<?php

require_once('database/db.class.php');

$objDatabase=new db_class();
$objDatabase->connect();
$sql="SELECT id,firstname,lastname,sex,email,userimage,ext,city,state,username FROM t_users WHERE username='".$_SESSION['username']."'";
$totalRow=$objDatabase->select($sql);

if($row=$objDatabase->get_row($totalRow, 'MYSQL_BOTH'))
{
    $userArray=array('id'=>$row['id'],'firstname'=>$row['firstname'],'lastname'=>$row['lastname'],'sex'=>$row['sex'],'email'=>$row['email'],'userimage'=>$row['userimage'],'ext'=>$row['ext'],'city'=>$row['city'],'state'=>$row['state'],'username'=>$row['username']);
}

header("Content-type: image/{$userArray['ext']}");
header("Content-Length: " . strlen($userArray['userimage']));
echo  $userArray['userimage'];
?>

编辑-我忘了包括:base64文件将比BLOB大得多


尝试将其保存为base64而不是BLOB

这是我在上找到的一个函数


当您从数据库检索图像时,它将作为base64字符串,您可以将该字符串直接放入HTML中的src=”“属性中(无需解码)。浏览器可以解析base64并显示图像。

请缩短共享代码,使其仅包含与问题相关的内容。能否向我们展示showimage.php?这就是问题所在,是吗?userImage是如何存储在数据库中的?您是否检查了数据库以查看图像数据是否正确存储?尝试
从t_users where…
中选择md5(userimage),查看它是否与您上载的文件的md5sum匹配。请注意,数据URI在IE 7及更低版本中不起作用。而且它们不会跨页面缓存,也不会像普通图像那样并行下载。简言之,尽管您可以这样做,但这很少是正确的方法。PHP提供了简单的base64_encode()和base64_decode()函数,因此如果需要,您可以在服务器端将其转换回二进制文件。但我必须同意Rich的观点,这是一种有点草率的方法。存储在数据库中的一个原因是如果您有一个Web服务器集群。除非您还实现了文件的自动复制,否则数据库是所有数据库的公共数据存储。
<?php

require_once('database/db.class.php');

$objDatabase=new db_class();
$objDatabase->connect();
$sql="SELECT id,firstname,lastname,sex,email,userimage,ext,city,state,username FROM t_users WHERE username='".$_SESSION['username']."'";
$totalRow=$objDatabase->select($sql);

if($row=$objDatabase->get_row($totalRow, 'MYSQL_BOTH'))
{
    $userArray=array('id'=>$row['id'],'firstname'=>$row['firstname'],'lastname'=>$row['lastname'],'sex'=>$row['sex'],'email'=>$row['email'],'userimage'=>$row['userimage'],'ext'=>$row['ext'],'city'=>$row['city'],'state'=>$row['state'],'username'=>$row['username']);
}

header("Content-type: image/{$userArray['ext']}");
header("Content-Length: " . strlen($userArray['userimage']));
echo  $userArray['userimage'];
?>
<img src='/image.php ?>' alt='' />
function base64_encode_image ($filename=string,$filetype=string) {
    if ($filename) {
        $imgbinary = fread(fopen($filename, "r"), filesize($filename));
        return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
    }
}