php实现上传图片保存到数据库的方法.具体分析如下:
php 上传图片,一般都使用move_uploaded_file方法保存在服务器上.但如果一个网站有多台服务器,就需要把图片发布到所有的服务器上才能正常使用(使用图片服务器的除外)
如果把图片数据保存到数据库中,多台服务器间可以实现文件共享,节省空间.
首先图片文件是二进制数据,所以需要把二进制数据保存在mysql数据库.
mysql数据库提供了BLOB类型用于存储大量数据,BLOB是一个二进制对象,能容纳不同大小的数据.
BLOB类型有以下四种,除存储的最大信息量不同外,其他都是一样的.可根据需要使用不同的类型.
数据表photo,用于保存图片数据,结构如下:
CREATE?TABLE?+photo+?(?
+id+?int(10)?unsigned?NOT?NULL?auto_increment,?
+type+?varchar(100)?NOT?NULL,?
+binarydata+?mediumblob?NOT?NULL,?
PRIMARY?KEY?(+id+)?
)?ENGINE=MyISAM?DEFAULT?CHARSET=latin1?AUTO_INCREMENT=1?;
upload_image_todb.php代码如下:
php?
//?连接数据库?
@mysql_select_db('demo',$conn)?or?die(mysql_error());?//?判断action?
$action?=?isset($_REQUEST['action'])?$_REQUEST['action']?:?'';?
//?上传图片?
if($action=='add'){?
$image?=?mysql_escape_string(file_get_contents($_FILES['photo']['tmp_name']));?
$type?=?$_FILES['photo']['type'];?
$sqlstr?=?"insert?into?photo(type,binarydata)?values('".$type."','".$image."')";?
header('location:upload_image_todb.php');?
exit();?
//?显示图片?
}elseif($action=='show'){?
$id?=?isset($_GET['id'])?intval($_GET['id'])?:?0;?
$sqlstr?=?"select?*?from?photo?where?id=$id";?
$query?=?mysql_query($sqlstr)?or?die(mysql_error());?
$thread?=?mysql_fetch_assoc($query);?
if($thread){?
header('content-type:'.$thread['type']);?
echo?$thread['binarydata'];?
}?
}else{?
//?显示图片列表及上传表单?
html?
head?
title?upload?image?to?db?demo?/title?
/head?
body?
form?name="form1"?method="post"?action="upload_image_todb.php"?enctype="multipart/form-data"?
p图片:input?type="file"?name="photo"/p?
pinput?type="hidden"?name="action"?value="add"input?type="submit"?name="b1"?value="提交"/p?
/form?
$sqlstr?=?"select?*?from?photo?order?by?id?desc";?
$result?=?array();?
while($thread=mysql_fetch_assoc($query)){?
$result[]?=?$thread;?
foreach($result?as?$val){?
echo?'pimg?
src="upload_image_todb.php?action=showid='.$val['id'].'t='.time().'"
/body?
/html?
程序运行截图和数据库截图:
第一步:通过$_FILES获取文件信息.
第二步:指定新文件名称以及路径,并赋值给一个变量.
第三步:通过move_uploaded_file上传文件.
第四步:上传成功后,将数值存入数据库服务器目录即可.
代码如下
①conn.php
$host="localhost";?//数据库服务器名称?
$user="root";?//用户名?
$conn=mysql_connect($host,$user,$pwd);?
mysql_query("SET?
character_set_client=binary",$conn);?
if?($conn==FALSE)?
{?
echo?"center服务器连接失败!br请刷新后重试./center";?
return?true;?
$databasename="database";//数据库名称?
do?
$con=mysql_select_db($databasename,$conn);?
}while(!$con);?
if?($con==FALSE)?
echo?"center打开数据库失败!br请刷新后重试./center";?
if?($_GET['action']?==?"save"){?
include_once('conn.php');?
include_once('uploadclass.php');?
$title=$_POST['title'];?
$pic=$uploadfile;?
if($title?==?"")?
echo"Scriptwindow.alert('对不起!你输入的信息不完整!');history.back()/Script";?
$sql="insert?into?upload(title,pic)?values('$title','$pic')";?
$result=mysql_query($sql,$conn);?
//echo"Scriptwindow.alert('信息添加成功');location.href='upload.php'/Script";?
title文件上传实例/title?
form?method="post"?action="?action=save"?enctype="multipart/form-data"?
table?border=0?cellspacing=0?cellpadding=0?align=center?width="100%"?
tr?
td标题:/td?
tdinput?name="title"?type="text"?id="title"/td?
/tr?
td文件:?/td?
tdlabel?
input?name="file"?type="file"?value="浏览"?
/label/td?
td?/td?
tdinput?type="submit"?value="上?传"?name="upload"/td?
/table/td?
/table?
/html
$uploaddir?=?"upfiles/";//设置文件保存目录?注意包含/?
$type=array("jpg","gif","bmp","jpeg","png");//设置允许上传文件的类型?
$patch="upload/";//程序所在路径?
//获取文件后缀名函数?
function?fileext($filename)?
return?substr(strrchr($filename,?'.'),?1);?
//生成随机文件名函数?
function?random($length)?
$hash?=?'CR-';?
$max?=?strlen($chars)?-?1;?
mt_srand((double)microtime()?*?1000000);?
for($i?=?0;?$i?$length;?$i++)?
$hash?.=?$chars[mt_rand(0,?$max)];?
return?$hash;?
$a=strtolower(fileext($_FILES['file']['name']));?
//判断文件类型?
if(!in_array(strtolower(fileext($_FILES['file']['name'])),$type))?
$text=implode(",",$type);?
echo?"您只能上传以下类型文件:?",$text,"br";?
//生成目标文件的文件名?
else{?
$filename=explode(".",$_FILES['file']['name']);?
$filename[0]=random(10);?//设置随机数长度?
$name=implode(".",$filename);?
//$name1=$name.".Mcncc";?
$uploadfile=$uploaddir.$name;?
while(file_exists($uploadfile));?
if?(move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile))?
if(is_uploaded_file($_FILES['file']['tmp_name']))?
echo?"上传失败!";?
else?
{//输出图片预览?
echo?"center您的文件已经上传完毕?上传图片预览:?/centerbrcenterimg?src='$uploadfile'/center";?
echo?"brcentera?href='upload.htm'继续上传/a/center";?
一般不会把图片直接存储在数据库中,一般在数据库中存储图片的文件路径,然后通过相对路径访问图片
存储的是相对路径,可以到网站服务器上查看,应该有upload文件夹,里面就是存储的图片,这样写的好处是节省了数据库存储空间,转移的时候可以直接将整个服务器的图片打包转移.
访问的时候,前面可以拼接域名和指定的路径,这些后台可以轻松获取到,然后拼接上服务器的路径,我们就可以直接在网页上访问到图片了.
这是很常见的图片数据库保存方式,和直接把图片的二进制存入数据库,这样的方式便于检索,占用空间小.当然,目前主流都采用oss来单独存储文件了,就是有专门的文件服务器,这个时候,一般存储的是完整的图片路径.
两种方法:
一:将图片上传至指定目录,在数据库中保存文件名和文件路径.
二:将图片文件读入字符串,将字符串保存到数据库,不推荐(没那么长的字段长度支持).
以上就是土嘎嘎小编为大家整理的php数据库怎么存取图片相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!