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