Login
网站首页 > 文章中心 > 其它

php实现图片上传完整版_PHP图片上传

作者:小编 更新时间:2023-09-22 07:27:54 浏览量:425人看过

PHP实现上传图片到数据库并显示输出的方法

本文实例讲述了PHP实现上传图片到数据库并显示输出的方法.分享给大家供大家参考,具体如下:

创建数据表

CREATE

TABLE

ccs_image

(

id

unsigned

NOT

NULL

auto_increment,

description

default

NULL,

bin_data

longblob,

filename

filesize

filetype

PRIMARY

KEY

(id)

)engine=myisam

DEFAULT

用于上传图片到服务器的页面

upimage.html

!doctype

html

lang="en"

head

meta

name="viewport"

content="width=device-width,

user-scalable=no,

initial-scale=1.0,

maximum-scale=1.0,

minimum-scale=1.0"

http-equiv="X-UA-Compatible"

content="ie=edge"

style

type="text/css"

*{margin:

①.%}

/style

titleDocument/title

/head

body

form

method="post"

action="upimage.php"

enctype="multipart/form-data"

描述:

input

type="text"

name="form_description"

type="hidden"

name="MAX_FILE_SIZE"

value="1000000"

br

上传文件到数据库:

type="file"

name="form_data"

type="submit"

name="submit"

value="submit"

/form

/body

/html

处理图片上传的php

upimage.php

php

if

(isset($_POST['submit']))

{

$form_description

=

$_POST['form_description'];

$form_data_name

$_FILES['form_data']['name'];

$form_data_size

$_FILES['form_data']['size'];

$form_data_type

$_FILES['form_data']['type'];

$form_data

$_FILES['form_data']['tmp_name'];

$dsn

'mysql:dbname=test;host=localhost';

$pdo

new

PDO($dsn,

'root',

'root');

$data

addslashes(fread(fopen($form_data,

"r"),

filesize($form_data)));

//echo

"mysqlPicture=".$data;

$result

$pdo-query("INSERT

INTO

(description,bin_data,filename,filesize,filetype)

VALUES

('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')");

($result)

echo

"图片已存储到数据库";

}

else

"请求失败,请重试";

注:图片是以二进制blob形式存进数据库的,像这样

显示图片的php

getimage.php

$id

$_GET['id'];

为简洁,直接将id写上了,正常应该是通过用户填入的id获取的

$dsn='mysql:dbname=test;host=localhost';

$pdo=new

PDO($dsn,'root','root');

$query

"select

bin_data,filetype

from

where

$pdo-query($query);

//

var_dump($result);

$result[0]['bin_data'];

$type

$result[0]['filetype'];

Header(

"Content-type:

$type");

$data;

到浏览器查看已经上传的图片,看是否可以显示

是没有问题的,证明图片已经以二进制的形式存储到数据库了

更多关于PHP相关内容感兴趣的读者可查看本站专题:<>、<>、<>、<>、<>及<>

希望本文所述对大家PHP程序设计有所帮助.

您可能感兴趣的文章:php实现上传图片保存到数据库的方法php上传图片存入数据库示例分享php上传图片到指定位置路径保存到数据库的具体实现php中如何将图片储存在数据库里php下将图片以二进制存入mysql数据库中并显示的实现代码php

从数据库提取二进制图片的处理代码php将图片保存入mysql数据库失败的解决方法php将图片文件转换成二进制输出的方法php图片的二进制转换实现方法

php 编写 实现上传图片至服务器的函数

class?FileUpload{

private?$filepath;?//指定上传文件保存的路径

private?$allowtype=array("gif","jpg","jpeg","png");//允许上传文件的类型

private?$maxsize=1000000;//允许上传文件的最大值

private?$israndname=true;//是否随机重命名,

private?$originName;//源文件名字

private?$tmpFileName;//临时文件名字

private?$fileType;//上传后的文件类型,主要是文件后缀名

private?$fileSize;//文件尺寸

private?$newFileName;//新文件名字

private?$errorName=0;//错误号

private?$errorMess="";//用来提供错误报告

//用于对上传文件初始化

//让用户可以不用换位置传参数,后面参数给值不用按照位置或者必须有值

function?__construct($options=array()){

foreach($options?as?$key=$val){

$key?=?strtolower($key);

//查看用户参数中的数组下标是否和成员属性名相同

//get_class_vars(get_class($this))得到类属性的数组

//如果$key下标不在这个类属性的数组中,则退出for循环

if?(!in_array($key,get_class_vars(get_class($this)))){

continue;

$this?-?setOption($key,$val);

private?function?setOption($key,$val){

//让实例化后获取过来的数组下标?=?数组下标的值,这里即为构造函数初始化

//构造函数中调用,等于把所有属性初始化,将来可以直接访问

$this?-?$key=$val;

private?function?getError(){

$str="上传文件{$this-originName}时出错";

switch($this?-?errorNum){

break;

case?1:?$str.="上传文件超过phpini的值";

case?-1:?$str.="未允许的类型";

default:?$str.="未知错误";

return?$str.'br';

//用来检查文件上传路径

private?function?checkFilePath(){

if(empty($this?-?filepath)){

return?false;

if(!file_exists($this?-?filepath)?||?!is_writable($this?-?filepath)){

}?

return?true;

//用来检查上传文件尺寸大小

private?function?checkFileSize(){

if($this?-?fileSize?$this?-maxsize){

}else{

//用来检查文件上传类型

private?function?checkFileType(){

if(in_array(strtolower($this-fileType),$this?-?allowtype)){

//如果$this-fileType这个类型?不在$this?-?allowtype这个数组中,则把错误号变成-1

$this?-?setOption("errorNum",-1);

private?function?setNewFileName(){

if($this?-?israndname){

$this?-?setOption("newFileName",$this-preRandName());

$this?-?setOption("newFileName",$this?-?originName);

//用于检查文件随机文件名

private?function?preRandName(){

return?$fileName.".".$this?-?fileType;

//用来上传一个文件

function?uploadFile($fileField){

//检查文件路径

$return?=?true;

if(!$this?-?checkFilePath()){

$this?-?errorMess=$this?-?getError();

}//获取文件信息

$name??=?$_FILES[$fileField]['name'];

$tmp_name?=?$_FILES[$fileField]['tmp_name'];

$size??=?$_FILES[$fileField]['size'];

$error?=?$_FILES[$fileField]['error'];???

if(is_array($name)){//判断获取过来的文件名字是否为数组

$errors=array();//如果为数组则设置为一个数组错误号

for($i=0;$icount($name);$i◆◆){

//循环每个文件即每个类属性赋值或者说初始化属性值?或者初始化构造函数

if($this-setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){

if(!$this-checkFileSize()?||?!$this-checkFileType()){

//如果上面尺寸或者类型不对,则调用这个错误信息

$errors[$i]=$this-getError();

$return=false;

//这里是

$error[]=$this-getError();

if(!$return)

$this-setFiles();

if($return){

$fileNames=array();

$this-setNewFileName();

if(!$this-copyFile()){

$errors=$this-getError();

$fileNames[$i]=$this-newFileName;

$this-newFileName=$fileNames;

$this-errorMess=$errors;

return?$return;

//看看$name,$tmp_name,$size,$error这些是否赋值成功?否则返回FALSE

if($this?-?setFiles($name,$tmp_name,$size,$error)){

//看看文件大小尺寸是否匹配,不匹配返回FALSE

if($this?-?checkFileSize()?$this?-?checkFileType()){

//获取新文件名

if($this-copyFile()){

if(!$return){

$this?-?errorMess?=?$this?-getError();

function?copyFile(){//将文件从临时目录拷贝到目标文件夹

if(!$this-errorNum){

//如果传递来的路径有斜杠,则删除斜杠再加上斜杠

//./upload◆./

$filepath=rtrim($this-filepath,'/').'/';

//./upload◆./◆加上随机后的新文件名和后缀

//这里指创建一个新的$filepath.这个文件?像占位符但是为空的

$filepath.=$this-newFileName;

//尝试着把临时文件$this-tmpFileName移动到$filepath下哪里覆盖原来的这个文件

if(@move_uploaded_file($this-tmpFileName,$filepath)){

//这里是为了其他剩余的属性进行初始化操作!

private?function?setFiles($name="",$tmp_name="",$size=0,$error=0){

//这里给错误号赋值

$this?-?setOption("errorNum",$error);

//如果这里有错误,直接返回错误

if?($error){

$this?-?setOption("originName",$name);//复制名字为源文件名

$this?-?setOption("tmpFileName",$tmp_name);

$arrstr?=?explode(".",$name);//按点分割文件名,

//取分割后的字符串数组最后一个?并转换为小写,赋值为文件类型

$this?-?setOption("fileType",strtolower($arrstr[count($arrstr)-1]));

$this?-?setOption("fileSize",$size);

//用来获取上传后的文件名

function?getNewFileName(){?

return?$this?-?newFileName;

//上传失败,后则返回这个方法,就可以产看报告

function?getErrorMsg(){

return?$this?-?errorMess;

============================调用====================================

require("FileUpload.class.php");

//这里实例化后赋值为数组,数组的下标要对应类中属性的值,否则不能传递值,可以不分先后但是必须一致

$up?=?new?FileUpload(array('israndname'='true',"filepath"="./upload/",'allowtype'=array('txt','doc','jpg','gif'),"maxsize"=1000000));

echo?'pre';

if($up?-?uploadFile("pic")){

print_r($up?-?getNewFileName());

}?else{

print_r($up?-?getErrorMsg());

-------------------HTML-------------------------

form?action="upload.php"?method="post"?enctype="multipart/form-data"

shoppic:input?type="file"?name="pic[]"br

input?type="hidden"?name="MAX_FILE_SIZE"?value="1000000"

input?type="submit"?name="sub"?value="添加商品"

-------------------或者HTML-------------------------

//区别今天这一节

=====================================================================

好了,全部的自己总结的 ?还没有怎么精简加工过,仅供参考

以上不止可以上传图片,可以上自定义任何文件

php如何实现上传图片文件,并替换

首先建立两个文件: change.html 和 change.php

change.html 文件的表单代码如下:

titlechange file example./title

form method="post" action="changefile.php" enctype="multipart/form-data"

table border=0 cellspacing=0 cellpadding=0 align=center width="100%"

tr

文件:

/td

td

input name="file" type="file" /

input type="submit" name="submit" value="submit" /

/tr

/table

以下为表单提交change.php文件代码,来看看这个文件都有什么:

/**

* @param string $oldfile 需要更换的文件名(包含具体路径名)

*/

function changeFile($oldfile){

$newfile = $_FILES['file']['name'];//获取上传文件名

$fileclass = substr(strrchr($newfile, '.'), 1);//获取上传文件扩展名,做判断用

$type = array("jpg", "gif", "bmp", "jpeg", "png");//设置允许上传文件的类型

if(in_array(strtolower($fileclass), $type)){

if(file_exists($oldfile)){

unlink($oldfile);

if(is_uploaded_file($_FILES['file']['tmp_name'])){//必须通过 PHP 的 HTTP POST 上传机制所上传的

if(move_uploaded_file($_FILES['file']['tmp_name'], $oldfile)){

//输出图片预览

echo "center您的文件已经上传完毕 上传图片预览: /centerbrcenterimg src='$oldfile'/center";

$text = implode(",", $type);

echo "center您只能上传以下类型文件:", $text, "/centerbr";

// echo "scriptalert('您只能上传以下类型文件:$text')/script";

changeFile("./files/1.png");

刚看这些你可能有点晕~~,慢慢看,你就会发现其实这玩意SO EASY!!先讲下原理,该程序以上传图片为例,先判断文件类型是否为图片格式,若是则上传文件,接着上传文件到并替换指定文件,成功上传则输出上传的图片预览.这里要对程序中一些函数作些解释.先看substr(strrchr($newfile, '.'), 1), strrchar()函数有什么作用呢,我举个例子大家就知道,比如一个图片文件 pic.jpg,我们用 strrchar()处理,strrchr(pic.jpg,'.'),它将返回.jpg,明白了吗?该函数返回指定字符在该字符串最后出现的位置后的字符串.配合 substr() 我们就可以取到jpg,这样我们就得到了文件的后缀名,来判断上传文件是否符合指定格式.本程序把指定的格式放在一个数组中,实际使用时可根据需要添加.

接着,我们调用判断文件类型的函数,并将其转化为小写strtolower($_FILES['file']['name']),这里有个很关键的东东$_FILES ,这是个超级全局数组,保存了需要处理的表单数据,如果开启了register_globals,也可以直接访问,但这是不安全的.看刚才那个上传接口input name="file" type="file",根据这个表单名称,我们可以得到很多信息:

$_FILES['file']['name']-- 得到文件名称

$_FILES['file']['tmp_name']--得到临时存储位置

$_FILES['file']['size']--得到文件大小

$_FILES['file']['type']--得到文件MIME类型

得到这些信息,就可以轻松判断文件的信息了,是不是很方便?^_^,此时此刻呢还有一些函数需要了解,file_exists()--判断指定目录是否存在,不存在我们当然不能上传(好像是废话!),is_uploaded_file--判断文件是否已经通过HTTP POST上传,move_uploaded_file--将上传文件移至指定目录.成功上传,我们就输出预览,否则输出上传失败......

怎样用php实现上传图片到数据库

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?

//?连接数据库?

$conn=@mysql_connect("localhost","root","")?or?die(mysql_error());?

@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."')";?

@mysql_query($sqlstr)?or?die(mysql_error());?

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?

程序运行截图和数据库截图:

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章