PHP好用文件上传类“单文件多文件上传”
- 格式:doc
- 大小:160.50 KB
- 文档页数:7
<?php/***文件的上传:*1.单个文件上传*2.多个文件上传*一、php配置文件中和上传有关的配置选项【经测试,修改配置文件修改的是wamp下的apache下的php.ini】*php.ini里面*file_uploads=on是必须的,不然文件写得再对都上传不到服务器上。
*upload_max_filesize=20M这个值一定不要超过服务器的内存大小。
*post_max_size=250M这个值是post的最大值,一定要比上传文件的最大值要大。
*上传上去的数据临时存在什么地方?upload_tmp_dir=c:/uploads/*在脚本执行完以后,临时文件会删除,所以在脚本执行完以前一定要把你上传的文件copy出来,不然就没了。
**二、上传需要注意的事项*文件上传表单需要注意什么?* 1.如果有文件上传操作,表单的提交方法method=post,必须用post。
* 2.表单上传需要使用类型为file的input* 3.enctype="multipart/form-data"只有文件上传时才用这个,用来指定表单编码的数据方式。
让服务器知道我们要传递文件。
*并带有一些常规的信息。
加在form里面和method一样。
*三、php处理上传的数据*$_POST提取post方法提交的的表单数据,如果是文件上传的数据则使用$_FILES接收文件,而$_POST接收*非文件数据。
所以当要上传文件时用两种方法接收数据。
点击上传后只要将临时文件移动到目标文件夹中就成功了。
*array(size=4)'shopname'=>string'得到'(length=6)'shoppri'=>string'得到'(length=6)'shopnum'=>string'得到'(length=6)'sub'=>string'添加商品'(length=12)array(size=1)'pic'=>array(size=5)'name'=>string'11112907_124211588000_2[1].jpg' (length=30)'type'=>string'image/jpeg'(length=10)'tmp_name'=>string'D:\wamp\tmp\phpDAA.tmp' (length=22)'error'=>int0'size'=>int288127**/header("Content-Type:text/html;charset=utf-8");date_default_timezone_set("PRC");//设置时区if(isset($_POST["sub"])){//var_dump($_POST);//var_dump(__FILE__);//string'D:\wamp\www\mytest\10-29-fileupload01.php'(length=41)//var_dump($_FILES);/*点击上传之后,执行以下操作*///1.使用$_FILES["pic"]["error"]检查错误if($_FILES['pic']['error']>0){switch($_FILES['pic']['error']){case1:echo"上传的文件超过了php.ini中upload_max_filesize选项限制的值<br/>";break;case2:echo"文件大小超过了1M<br/>";break;case3:echo"文件只有部分被上传<br/>";break;case4:echo"没有文件被上传<br/>";break;default:echo"未知错误<br/>";}exit;}//2.使用$_FILES["pic"]["size"]限制大小if($_FILES['pic']['size']>1000000){echo"文件不能大于1M<br/>";exit;}//3.使用$_FILES["pic"]["type"]或文件的扩展名来限制类型。
PHP⽂件上传-通过类实现单⽂件或多⽂件上传本案例有三个⽂件,⽬录结构如下图:核⼼⽂件上传类uploads.class.php (既能上传单⽂件⼜能上传多⽂件),程序不⾜之处还请多多指教!uploads.class.php代码如下:<?phpclass uploads{protected$fileName;protected$maxSize;protected$allowMime;protected$allowExt;protected$uploadPath;protected$imgFlag;protected$fileInfo;protected$error;protected$ext;protected$uniName;protected$destination;protected$file;protected$files;protected$i;protected$key;protected$value;protected$res;protected$uploadFiles;public function __construct($uploadPath='./uploads',$imgFlag=true,$maxSize=5242880,$allowExt=array('jpeg','jpg','png','gif'),$allowMime=array('image/jpeg','image/png','image/gif')){ //$this->fileName=$fileName;$this->maxSize=$maxSize;$this->allowMime=$allowMime;$this->allowExt=$allowExt;$this->uploadPath=$uploadPath;$this->imgFlag=$imgFlag;//$this->fileInfo=$_FILES[$this->fileName];//构建上传⽂件的信息foreach($_FILES as$this->file){if(is_string($this->file['name'])){$this->files[$this->i]=$this->file;$this->i++;}elseif(is_array($this->file['name'])){foreach($this->file['name'] as$this->key=>$this->value){$this->files[$this->i]['name']=$this->file['name'][$this->key];$this->files[$this->i]['type']=$this->file['type'][$this->key];$this->files[$this->i]['tmp_name']=$this->file['tmp_name'][$this->key];$this->files[$this->i]['error']=$this->file['error'][$this->key];$this->files[$this->i]['size']=$this->file['size'][$this->key];$this->i++;}}}}protected function checkError(){if($this->fileInfo['error']!=0){switch($this->fileInfo['error']){case 1:$this->error='上传⽂件超出了php配置中upload_max_filesize选项的值';break;case 2:$this->error="超出了表单MAX_FILE_SIZE限制的⼤⼩";break;case 3:$this->error="⽂件部分被上传";break;case 4:$this->error="没有选择上传⽂件";break;case 6:$this->error="没找到临时⽬录";break;case 7:$this->error="⽂件不可写";break;case 8:$this->error="系统错误";break;}return false;}return true;}protected function checkExt(){$this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION));if(!in_array($this->ext,$this->allowExt)){$this->error='不允许的扩展名';return false;}return true;}protected function checkSize(){if($this->fileInfo['size']>$this->maxSize){$this->error='上传⽂件过⼤';return false;}return true;}/*检测⽂件类型的*/protected function checkMime(){if(!in_array($this->fileInfo['type'],$this->allowMime)){$this->error='不允许的⽂件类型';return false;}return true;}protected function checkTrueImg(){if($this->imgFlag){if(!@getimagesize($this->fileInfo['tmp_name'])){$this->error='不是真实图⽚';return false;}}return true;}/*是否通过HTTPPOST⽅式上传上来的*/protected function checkHTTPPOST(){if(!is_uploaded_file($this->fileInfo['tmp_name'])){$this->error='⽂件不是通过HTTPPOST⽅式上传上来的';return false;}return true;}/*显⽰错误信息*/protected function showError(){echo('<sapn style="color:red;">'.$this->error.'</sapn>');echo "<br/>";}protected function checkUploadPath(){if(!file_exists($this->uploadPath))mkdir($this->uploadPath,0777,true);}/*产⽣唯⼀字符串*/protected function getUniName(){return md5(uniqid(microtime(true),true));}protected function uploadFile(){if($this->checkError()&&$this->checkExt()&&$this->checkSize()&&$this->checkMime()&&$this->checkTrueImg()&&$this->checkHTTPPOST()){ $this->checkUploadPath();$this->uniName=$this->getUniName();$this->destination=$this->uploadPath.'/'.$this->uniName.'.'.$this->ext; if(@move_uploaded_file($this->fileInfo['tmp_name'],$this->destination)){ $this->uploadFiles[]=$this->destination;}else{$this->error='⽂件移动失败';$this->showError();}}else{$this->showError();}}public function uploadsFile(){foreach($this->files as$this->fileInfo){$this->uploadFile($this->fileInfo);}return$this->uploadFiles;}}upload3.html⽂件代码如下:<html><head><meta charset="utf-8"></head><body><form action="do_action3.php" method="post"enctype="multipart/form-data"><!--<input type="hidden" name="MAX_FILE_SIZE" value="176942">--><label for="file">请选择要上传的⽂件:</label><input type="file" name="file1" id="file"/><br /><label for="file">请选择要上传的⽂件:</label><input type="file" name="file2" id="file"/><br /><label for="file">请选择要上传的⽂件:</label><input type="file" name="file[]" id="file"/><br /><label for="file">请选择要上传的⽂件:</label><input type="file" name="file[]" id="file"/><br /><label for="file">请选择要上传的⽂件:</label><input type="file" name="file[]" id="file" multiple /><br /> <input type="submit" name="submit" value="上传"/></form></body></html>do_action3.php⽂件的代码如下:<?phpheader("content-type:text/html;charset=utf-8");//header("content-type:text/html;charset=utf-8;");require_once "uploads.class.php";echo "<pre>";$upload=new uploads();$dest=$upload->uploadsFile();var_dump($dest);测试截图如有疑问加QQ群联系我!。
php 实现多文件上传程序代码php文件上传与多文件上传其它没有多大的区别,多文件上传只是我们把表单名改成数组形式,而获取利用foreach遍历就可以实现多文件上传了,动态多文件上传只要在js加一个动态增加多文件上传框,同样在php处理时就遍历一下数组就成了。
最简单的实例如下代码如下复制代码<form action="" method="post" enctype="multipart/form-data"><p>Pictures:<input type="file" name="pictures[]" /><input type="file" name="pictures[]" /><input type="file" name="pictures[]" /><input type="submit" value="Send" /></p></form><?phpforeach ($_FILES["pictures"]["error"] as $key => $error) {if ($error == UPLOAD_ERR_OK) {$tmp_name = $_FILES["pictures"]["tmp_name"][$key];$name = $_FILES["pictures"]["name"][$key];move_uploaded_file($tmp_name, "data/$name");}}?>下面分享其它朋友的例子例1代码如下复制代码<?//filename:multi_upload.phpif($ifupload){$path=AddSlashes(dirname($PATH_TRANSLATED))."upload";for($i=1;$i<=8;$i++){$files="afile".$i;if(${$files}!="none"){if(copy(${$files},$path.${$files."_name"})){}}}print "<b>You have uploaded files successfully</b><br>";print "<a href="multi_upload.php">Return</a>";exit;}?><html><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <title>多个文件上传</title><style type="text/css"><!--BODY{PADDING-RIGHT: 0px;MARGIN-TOP: 0px;PADDING-LEFT: 0px;FONT-SIZE: 8px;MARGIN-LEFT: 0px;CURSOR: default;COLOR: black;MARGIN-RIGHT: 0px;PADDING-TOP: 0px;FONT-FAMILY: Arial; BACKGROUND-COLOR: transparent; TEXT-ALIGN: center}.TxtInput{FONT-SIZE: 8pt;WIDTH: 100%;CURSOR: default;COLOR: black;FONT-FAMILY: Arial;HEIGHT: 21px;BACKGROUND-COLOR: white; TEXT-ALIGN: left}.FieldLabel{FONT-WEIGHT: normal;FONT-SIZE: 9pt;WIDTH: 100%;COLOR: black;FONT-FAMILY: Arial; BACKGROUND-COLOR: transparent; TEXT-ALIGN: left}.HeadBtn{BORDER-RIGHT: black 1px solid; BORDER-TOP: white 1px solid; FONT-SIZE: 8pt;OVERFLOW: hidden;BORDER-LEFT: white 1px solid; WIDTH: 70px;COLOR: black;BORDER-BOTTOM: black 1px solid; FONT-FAMILY: Arial;HEIGHT: 21px;BACKGROUND-COLOR: #8e8dcd; TEXT-ALIGN: center}.TransEx{BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 8px;BORDER-TOP: white 1px solid; PADDING-LEFT: 8px;FONT-SIZE: 8pt;PADDING-BOTTOM: 3px;BORDER-LEFT: white 1px solid; WIDTH: 720px;PADDING-TOP: 3px;BORDER-BOTTOM: black 1px solid;FONT-FAMILY: Arial;BACKGROUND-COLOR: #c0c0c0;TEXT-ALIGN: center}--></style><script language="javascript">function window.onload(){document.forms[0].btnOk.onclick=btn_ok;}function btn_ok(){for(var i=1;i<=8;i++){if(eval("document.forms[0].afile"+i+".value!=''"))document.forms[0].submit();return true;}alert("None of file have been select ed");return false;}</script></head><body><form method="post" action="multi_upload.php" name="frmUpload" enctype="multipart/form-data" ><table id="divContainer" style="HEIGHT: 100%; WIDTH: 380" border="0"> <tr height="35"><td align="right" valign="bottom">多文件上传</td></tr><tr><td align="center" valign="top"><table class="Transex" border="0" cellspacing="0" cellpadding="0" style="WIDTH: 360px"><tr style="HEIGHT: 10px" ><td style="WIDTH: 5px"></td><td colspan="2"></td><td style="WIDTH: 5px"></td></tr><tr><td></td><td nowrap><label class="FieldLabel"> 文件1</label></td><td><input type="file" class="TxtInput" tabindex="1" name="afile1" style="WIDTH: 282px"></td> <td></td></tr><tr><td></td><td nowrap><label class="FieldLabel"> 文件2</label></td><td><input type="file" class="TxtInput" tabindex="2" name="afile2" style="WIDTH: 282px"></td> <td></td></tr><tr><td></td><td nowrap><label class="FieldLabel"> 文件3</label></td><td><input type="file" class="TxtInput" tabindex="3" name="afile3" style="WIDTH: 282px"></td> <td></td></tr><tr><td></td><td nowrap><label class="FieldLabel"> 文件4</label></td><td><input type="file" class="TxtInput" tabindex="4" name="afile4" style="WIDTH: 282px"></td> <td></td></tr><tr><td></td><td nowrap><label class="FieldLabel"> 文件5</label></td><td><input type="file" class="TxtInput" tabindex="5" name="afile5" style="WIDTH: 282px"></td> <td></td></tr><tr><td></td><td nowrap><label class="FieldLabel"> 文件6</label></td><td><input type="file" class="TxtInput" tabindex="6" name="afile6" style="WIDTH: 282px"></td> <td></td></tr><tr><td></td><td nowrap><label class="FieldLabel"> 文件7</label></td><td><input type="file" class="TxtInput" tabindex="7" name="afile7" style="WIDTH: 282px"></td> <td></td></tr><tr><td></td><td nowrap><label class="FieldLabel"> 文件8</label></td><td><input type="file" class="TxtInput" tabindex="8" name="afile8" style="WIDTH: 282px"></td> <td></td></tr><tr style="HEIGHT: 5px"><td style="WIDTH: 5px"><td style="WIDTH: 350px" colspan="2"><hr width="100%"></td><td style="WIDTH: 5px"></td></tr><tr><td></td><td colspan="2" align="left"><button tabindex="5" class="headbtn" align="center" name="btnOk" id="btnOk" accesskey="O">确定(<ins>O</ins>)</button><input type="hidden" name="ifupload" value=1><button tabindex="5" class="eadbtn" align="center" name="btnCancel"id="btnCancel" accesskey="C" onclick="window.close();">取消(<ins>C</ins>)</button></td><td></td></tr><tr style="HEIGHT: 5px"><td style="WIDTH: 5px"><td style="WIDTH: 350px" colspan="2"></td><td style="WIDTH: 5px"></td></tr></table></td></tr></table></form></body></html>如果我们要动态不确定性的多文件上传怎么实现下面也有实例文件上传代码代码如下复制代码view plaincopy to clipboardprint?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>文档上传</title></head><body><script language="javascript"><!--动态添加文件选择控件-->function AddRow(){var eNewRow = tblData.insertRow();for (var i=0;i<1;i++){var eNewCell = eNewRow.insertCell();eNewCell.innerHTML = "<tr><td><input type='file' name='filelist[]' size='50'/></td></tr>";}}// --></script><form name="myform" method="post" action="uploadfile.php" enctype="multipart/form-data" > <table id="tblData" width="400" border="0"><!-- 将上传文件必须用post的方法和enctype="multipart/form-data" --><!-- 将本页的网址传给uploadfile.php--><input name="postadd" type="hidden" value="<?php echo"http://".$_SERVER['HTTP_HOST'].$_SERVER["PHP_SELF"]; ?>" /><tr><td>文件上传列表<input type="button" name="addfile" onclick="AddRow()" value="添加列表" /></td></tr><!-- filelist[]必须是一个数组--><tr><td><input type="file" name="filelist[]" size="50" /></td></tr></table><input type="submit" name="submitfile" value="提交文件" /></form></body></html><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>文档上传</title></head><body><script language="javascript"><!--动态添加文件选择控件-->function AddRow(){var eNewRow = tblData.insertRow();for (var i=0;i<1;i++){var eNewCell = eNewRow.insertCell();eNewCell.innerHTML = "<tr><td><input type='file' name='filelist[]' size='50'/></td></tr>";}}// --></script><form name="myform" method="post" action="uploadfile.php" enctype="multipart/form-data" > <table id="tblData" width="400" border="0"><!-- 将上传文件必须用post的方法和enctype="multipart/form-data" --><!-- 将本页的网址传给uploadfile.php--><input name="postadd" type="hidden" value="<?php echo"http://".$_SERVER['HTTP_HOST'].$_SERVER["PHP_SELF"]; ?>" /><tr><td>文件上传列表<input type="button" name="addfile" onclick="AddRow()" value="添加列表" /></td></tr> <!-- filelist[]必须是一个数组--><tr><td><input type="file" name="filelist[]" size="50" /></td></tr></table><input type="submit" name="submitfile" value="提交文件" /></form></body></html>提交文件代码view plaincopy to clipboardprint?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>文件上传结果</title></head><body><?phpif ($_POST["submitfile"]!=""){$Path="./".date('Ym')."/";if (!is_dir($Path))//创建路径{ mkdir($Path); }echo "<div>";for ($i=0;$i<count($filelist);$i++){ //$_FILES["filelist"]["size"][$i]的排列顺序不可以变,因为fileist是一个二维数组if ($_FILES["filelist"]["size"][$i]!=0){$File=$Path.date('Ymdhm')."_".$_FILES["filelist"]["name"][$i];if (move_uploaded_file($_FILES["filelist"]["tmp_name"][$i],$File)){ echo "文件上传成功文件类型:".$_FILES["filelist"]["type"][$i]." "."文件名:".$_FILES["filelist"]["name"][$i]."<br>"; }else{ echo "文件名:".$_FILES["filelist"]["name"][$i]."上传失败</br>"; }}}echo "</div><br><a href="$postadd" href="$postadd">返回</a></div>";}?></body></html>另:错误信息说明从PHP 4.2.0 开始,PHP 将随文件信息数组一起返回一个对应的错误代码。
class upFiles{/*** 上传的文件信息* @var array*/public $uploadFiles = array();/*** 保存文件路径* @var string*/public $saveFilePath;/*** 最大文件大小* @var int*/public $maxFileSize;/*** 错误信息* @var string*/public $lastError;/*** 默认充许上传的文件类型* @var array*/public $allowType = array('gif','jpg','png','bmp');/*** 最终保存的文件名称* @var string*/public $finalFilePath;/*** 返回已经上传文件的详细信息* @var array*/public $saveFileInfo = array();/*** 构造函数,初始化相关信息,包括文件内容,上传地址,文件最大限制,文件类型* @param array $file* @param string $path* @param int $size* @param array $typepublic function __construct($file,$path,$size= 2097152,$type = ''){$this->uploadFiles = $file;$this->saveFilePath = $path;$this->maxFileSize = $size;if($type != '') $this->allowType = $type;}public function upload(){for($i=0;$i<count($this->uploadFiles['name']);$i++){//如果文件上传没有出现错误if($this->uploadFiles['error'][$i] == 0){//获取当前文件名,临时文件名,文件大小,扩展名$name = $this->uploadFiles['name'][$i];$tmpname = $this->uploadFiles['tmp_name'][$i];$size = $this->uploadFiles['size'][$i];$minetype = $this->uploadFiles['type'][$i];$type = $this->getFileExt($this->uploadFiles['name'][$i]);//检查文件大小是否合法if(!$this->checkSize($size)){$this->lastError = "文件大小超出限制.文件名称:".$name;$this->printMsg($this->lastError);continue;}//检查文件扩展名是否合法if(!$this->checkType($type)){$this->lastError = "非法的文件类型.文件名称:".$name;$this->printMsg($this->lastError);continue;}//检测当前文件是否非法提交if(!is_uploaded_file($tmpname)){$this->lastError = "上传文件无效.文件名称:".$name;$this->printMsg($this->lastError);continue;}//移动后的文件名称$basename = $this->getBaseName($name,'.'.$type);//上传文件重新命名,格式为UNIX时间戳+4位随机数,生成一个14位文件名$savename = time().mt_rand(1000,9999).'.'.$type;//创建上传文件的文件夹@mkdir($this->saveFilePath);$file_name1 = $this->saveFilePath.'/'.date('Y');@mkdir($file_name1);$file_name2 = $this->saveFilePath.'/'.date('Y').'/'.date('m');@mkdir($file_name2);//最终组合的文件路径$this->finalFilePath = $file_name2.'/'.$savename;//把上传的文件从临时目录移到目标目录if(!move_uploaded_file($tmpname,$this->finalFilePath)){$this->$this->uploadFiles['error'][$i];$this->printMsg($this->lastError);continue;}//存储已经上传的文件信息$this->saveFileInfo = array('name' => $name,'type' => $type,'minetype' => $minetype,'size' => $size,'savename' => $savename,'path' => $this->finalFilePath,);}}//返回上传的文件数量return count($this->saveFileInfo);}/*** 取出已上传文件信息,以便进行其它操作** @return array*/public function getSaveFileInfo(){return $this->saveFileInfo;}/*** 检查上传文件大小是否合法** @param int $size* @return boolean*/private function checkSize($size){return $size > $this->maxFileSize) ? false : true;;}/*** 检查文件类型是否合法** @param string $etype* @return boolean*/private function checkType($etype){foreach($this->allowType as $type){if(strcasecmp($etype,$type) == 0) return true;}return false;}/*** 打印信息** @param string $msg*/private function printMsg($msg){return $msg;}/*** 获取文件的扩展名** @param string $filename* @return string*/private function getFileExt($filename){$ext = pathinfo($filename);return $ext['extension'];}/*** 获取文件名** @param string $filename* @param string $type* @return string*/private function getBaseName($filename,$type) {$basename = basename($filename,$type);return $basename;}}?>。
PHP+jQuery+Ajax仿淘宝多上传按钮单文件上传PHP+jQuery+Ajax仿淘宝多上传按钮单文件上传如何做一个仿淘宝多上传的`按钮单文件上传呢?下面是由店铺为大家整理的PHP+jQuery+Ajax仿淘宝多上传按钮单文件上传,喜欢的可以收藏一下!了解更多详情资讯,请关注店铺!其代码如下:上传表单<form class="imageform" method="post" enctype="multipart/form-data" action="upload.php"><div class="up_status" style="display:none"><img src="loader.gif" alt="uploading"/></div><div class="btn up_btn"><span>添加图片</span><input class="photoimg" type="file" name="photoimg"></div></form><div class="preview_img"></div>引入样式和上传插件jquery.wallform.js<link rel="stylesheet" type="text/css" href="css/style.css" /><script type="text/javascript" src="/js/jquery/1.7.2/jquery.min.js"></scri pt><script type="text/javascript" src="jquery.wallform.js"></script>jQuery$("body").on("change", ".photoimg",function() {var obj = $(this);var imageForm = obj.parents(".imageform");var preview_img = imageForm.next(".preview_img");var btn = imageForm.find(".up_btn");imageForm.ajaxForm({target: preview_img,beforeSubmit: function() {imageForm.next("div.preview_img").html(""); preview_img.hide();btn.hide();},success: function() {preview_img.show();btn.show();},error: function() {btn.show();preview_img.hide();}}).submit();});PHP上传 upload.phpif (isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") {$name = $_FILES['photoimg']['name'];$size = $_FILES['photoimg']['size'];if (empty($name)) {echo '请选择要上传的图片';exit;}$ext = extend($name);if (!in_array($ext, $extArr)) {echo '图片格式错误!';exit;}if ($size > (1000 * 1024)) {echo '图片大小不能超过1M';exit;}$image_name = time() . rand(100, 999) . "." . $ext;$tmp = $_FILES['photoimg']['tmp_name'];if (move_uploaded_file($tmp, $path . $image_name)) {echo '<img src="' . $path . $image_name . '" class="preview">';} else {echo '上传出错了!';}exit;}。
PHP实现多⽂件上传的⽅法本⽂实例讲述了PHP实现多⽂件上传的⽅法。
分享给⼤家供⼤家参考。
具体实现⽅法如下:<?phpdefine('ROOT','D:/Program Files/www/test/');class Files_Tool{protected static $allowExt=array('.jpg','.jpeg','.png','.gif','.bmp','.svg','.chm','.pdf','.zip','.rar','.tar','.gz','.bzip2','.ppt','.doc'); public static $wrong=array();public static $path=array();protected static $error=array(0=>'⽂件上传失败,没有错误发⽣,⽂件上传成功',1=>'⽂件上传失败,上传的⽂件超过了 php.ini中upload_max_filesize 选项限制的值',2=>'⽂件上传失败,上传⽂件的⼤⼩超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值',3=>'⽂件上传失败,⽂件只有部分被上传',4=>'⽂件上传失败,没有⽂件被上传',5=>'⽂件上传失败,未允许的后缀',6=>'⽂件上传失败,找不到临时⽂件夹.PHP 4.3.10 和 PHP 5.0.3 引进',7=>'⽂件上传失败,⽂件写⼊失败.PHP 5.1.0 引进',8=>'⽂件上传失败,未接收到表单域的NAME',9=>'⽂件上传失败,,错误未知');public static function upload($name){//检测是否接收到表单域的NAMEif(!isset($_FILES[$name])){self::$wrong[]=8;return false;}//3维数组简化成2维数组$files=array_shift($_FILES);//获取后缀$files=self::get_Ext($files);//处理⽂件次数$n=count($files['name']);for($i=0;$i<$n;$i++){//查看当前⽂件是否有错误信息,有则跳过当前⽂件,处理下个⽂件if($files['error'][$i]!=0){self::$wrong[$i+1]=$files['error'][$i];continue;}//查看当前⽂件的后缀,是否允许,如果不允许,跳过当前⽂件if(!in_array($files['name'][$i],self::$allowExt)){self::$wrong[$i+1]=5;continue;}//路径$dir=self::time_Dir();//⽂件名$name=self::rand_Name();//后缀$ext=$files['name'][$i];//⽂件位置$path=$dir.$name.$ext;//移动临时⽂件,如果失败,跳过当前⽂件if(!move_uploaded_file($files['tmp_name'][$i],$path)){self::$wrong[$i]=9;continue;}//存⼊路径self::$path[$i+1]=strtr($path,array(ROOT=>''));}return self::$path;}//获取后缀的⽅法protected static function get_Ext($arr){if(!is_array($arr) || !isset($arr['name'])){return false;}foreach($arr['name'] as $k=>$v){$arr['name'][$k]=strtolower(strrchr($v,'.'));}return $arr;}//以⽇期⽣成路径protected static function time_Dir(){$dir=ROOT.'Data/images/'.date('Y/m/d/',time());if(!is_dir($dir)){mkdir($dir,0777,true);}return $dir;}//⽣成随机⽂件名protected static function rand_Name(){$str=str_shuffle('1234567890qwertyuiopasdfghjklzxcvbnm'); $str=substr($str,0,6);return $str;}//错误接⼝public static function errors(){foreach(self::$wrong as $k=>$v){self::$wrong[$k]='第'.$k.'个'.self::$error[$k];}return self::$wrong;}}希望本⽂所述对⼤家的php程序设计有所帮助。
php多文件上传解析和代码示例自己写的一段多文件上传代码,已测试可用。
要使用PHP实现文件上传功能,我们先来编写两个php文件:test.html和upfiles.php。
其中,test.html页面用于提交文件上传的表单请求,upfiles.php 页面用于接收上传的文件并进行相应处理。
示例一中加入了判断上传的文件是否是文本文件的语句。
【加限制是为了增加安全性】如果要上传任意类型文件,去掉红色代码部分。
upfiles.php代码:示例一:<?php//多文件上传header('Content-Type:text/html;charset=utf-8');$file_Arr = $_FILES['userfile'];//上传文件的相关信息存放在超全局变量$_FILES中。
因此,我们只需要通过$_FILES数组获取上传的文件信息,然后对其进行相应的处理操作即可。
$upfile = 'D:/upload/'; //上传文件的存放路径foreach($file_Arr['error'] as $key => $error){if($error == UPLOAD_ERR_OK ){if($file_Arr['type'][$key] != 'text/plain'){echo "上传的文件不是文本文件";exit;}else{$tmp_name=$file_Arr['tmp_name'][$key]; //提交表单以后,文件上传到服务器,暂时存放在服务器的临时目录里边。
即:文件在服务器上的临时目录。
//注意:文件存放在临时目录时,文件名是不是它本身真实的文件名,而是系统自动给文件分配的一个文件名。
$name=$file_Arr['name'][$key]; //上传文件的文件名$name=iconv("utf-8","GBK",$name);//解决上传中文文件时乱码问题move_uploaded_file($tmp_name,$upfile.$name);//移动服务器临时目录中的文件到存放上传文件的目录,并重命名为真实名称。
这个 php 文件上传类比较简单,需要更多的功能读者可以自己扩展,包括错误信息提示等, 多文件上传可以参照上篇 php 教程! <?php header("Content-Type:text/html; charset=utf-8"); if($_POST['submit']){ $upfiles= new Upload(); $upfiles->upload_file(); } class Upload{ /*作者:mckee 来自:*/ public $upload_name; //上传文件名 public $upload_tmp_name; //上传临时文件名 public $upload_final_name; //上传文件的最终文件名 public $upload_target_dir; //文件被上传到的目标目录 public $upload_target_path; //文件被上传到的最终路径 public $upload_filetype; //上传文件类型 public $allow_uploadedfile_type; //允许的上传文件类型 public $upload_file_size; //上传文件的大小 public $allow_uploaded_maxsize=10000000; //允许上传文件的最大值 //构造函数 public function __construct() { $this->upload_name= $_FILES["file"]["name"]; //取得上传文件名 $this->upload_filetype= $_FILES["file"]["type"]; $this->upload_tmp_name= $_FILES["file"]["tmp_name"]; $this->allow_uploadedfile_type= array('jpeg','jpg','png','gif','bmp','doc','zip','rar','txt','w ps'); ) $this->upload_file_size= $_FILES["file"]["size"]; $this->upload_target_dir="./upload"; } //文件上传 public function upload_file() { $upload_filetype= $this->getFileExt($this->upload_name); if(in_array($upload_filetype,$this->allow_uploadedfile_type) { if($this->upload_file_size< $this->allow_uploaded_maxsize) { if(!is_dir($this->upload_target_dir)) { mkdir($this->upload_target_dir); chmod($this->upload_target_dir,0777); } $this->upload_final_name= date("YmdHis").rand(0,100).'.'.$upload_filetype; $this->upload_target_path= $this->upload_target_dir."/".$this->upload_final_name; if(!move_uploaded_file($this->upload_tmp_name,$this->upload_ target_path)) echo"<font color=red>文件上传失败!</font>"; } else { echo("<font color=red>文件太大,上传失败!</font>"); } } else { echo("不支持此文件类型,请重新选择"); } } /** *获取文件扩展名 *@param String $filename 要获取文件名的文件 */ public function getFileExt($filename){ $info= pathinfo($filename); return $info["extension"]; } } ?> <form enctype="multipart/form-data" method="POST" action=""> <input type="file" name="file"><input type="submit" name="submit" value="上传"> </form>欢迎转载! 原文地址: /php/632.html ,转载请注明地址,谢谢!。
在网上看到一个比较好的多文件上传类, 自己改良了下, 顺便用 js 实现了多文件浏览,php 文件上传原理都是相同的,多文件上传也只是进行了循环上传而已,当然你也可以使用 swfupload 进行多文件上传! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" charset=UTF-8">content="text/html; <title>Insert title here</title> <script language="javascript" type="text/javascript"> function AddInput(){ var input=document.createElement('input');//创建一个 input 节点 var br=document.createElement('br');//创建一个 br 节点 input.setAttribute('type','file');//设置 input 节点 type 属性为 file input.setAttribute('name','files[]');//设置 input 节点 name 属性 为 files[],以 数组的方式传递给服务器端 document.myForm.appendChild(br);//把节点添加到 form1表单中 document.myForm.appendChild(input); } </script> </head> <body> <?php /* * 尊重作者:mckee 来自 * 可同时处理用户多个上传文件。
PHP多文件(图片)上传总共三个文件conn.php index.php upload.phpconn.php 文件--------------------------------------------------------------------------------------------------------------<?php$conn=mysql_connect("localhost","root","passwd") or die("数据库服务器连接错误".mysql_error());mysql_select_db("database",$conn) or die("数据库访问错误".mysql_error());mysql_query("set character utf8");mysql_query("set names utf8");?>index.php 文件--------------------------------------------------------------------------------------------------------------<html><head>上传文件</head><body><form method="post" action="upload.php" enctype="multipart/form-data"> <input name='uploads[]' type="file" multiple><input type="submit" name="uploadpic" value="上传"></form></body></html>upload.php 文件<?phpinclude("conn.php");$uploadfile; // 图片的名字if($_POST['uploadpic']=='上传'){$dest_folder = "picture/"; //上传图片保存的路径图片放在跟你upload.php同级的picture文件夹里$arr=array(); //定义一个数组存放上传图片的名称方便你以后会用的。
PHP好用文件上传类——单文件多文件上传今天看了一下百度指数,发现原来“php文件怎么打开”这个关键词居然还挺多人搜索的,于是想起了自己刚开始学习PHP的时候傻乎乎的,什么都不会,老师讲那么多自己学那么多,之后发现什么也没学到(相信很多童鞋跟我也是一样吧),接触了一段时间后发现PHP 不是很难,但要学精通不容易啊,遂开始发奋,这不,今天写了个PHP的类来练练手,随便也给同样是新手的童鞋一点我学习的经验,在学习PHP过程中肯定会学习到文件上传相关知识,PHP上传在程序中经常使用,今天弄了一个文件上传类,是参照高洛峰老师的视频写的,非常好用,同时简单修改了一下,这个类可以实现单文件、多文件的上传,如果有大神,拍砖请轻点……1 2 3 4 5 6 7 8 9101112131415161718192021222324 class FileUpload{protected $path; //文件保存路径protected $size = 2000000; //上传文件限制大小,默认为2Mprotected $allowtype = array('jpg','gif','png','bmp','tif'); //可上传文件格式protected $israndnam e = true; //是否修改文件名protected $tempName; //临时文件名protected $originNam e; //源文件名protected $fileType; //上传文件类型protected $filesize; //上传文件大小protected $newName; //新文件名protected $errorNum = 0; //错误代码protected $errorMass; //错误信息//初始化各项设置function __construct($option = array()){foreach($option as $key=>$value){$key = strtolower($key);//检测各个配置项是否存在if(!in_array($key,get_class_vars(get_class($this)))){continue;}$this->setOption($key,$value);25262728293031323334353637383940414243444546474849505152535455565758596061}}//上传函数public function uploadFile($fileField){$return = true;if(!$this->checkPath()){$this->errorMess = $this->getError();return false;}$name = $_FILES[$fileField]['name'];$error = $_FILES[$fileField]['error'];$size = $_FILES[$fileField]['size'];$tmp_name = $_FILES[$fileField]['tmp_name'];if(is_array($nam e)){$errors = array();for($i=0;$i<count($name);$i++){if(empty($name[$i])){continue;}if($this->setFiles($name[$i],$error[$i],$size[$i],$tmp_name[$i])){if(!$this->checkSize() || !$this->checkType()){$errors[] = $this->getError();$return = false;}}else{$errors[] = $this->getError();$return = false;}}if($return){$fileName = array();for($i=0;$i<count($name);$i++){if($this->setFiles($name[$i],$error[$i],$size[$i],$tmp_name[$i])){62636465666768697071727374757677787980818283848586878889909192939495969798$this->setNewFileName();if(!$this->copyFile()){$errors[] = $this->getError();$return = false;}else{$fileName[] = $this->newName;}}}$this->newNam e = $fileName;}$this->errorMess = $errors;return $return;}else{if($this->setFiles($name,$error,$size,$tmp_name)){ if($this->checkSize() && $this->checkType()){$this->setNewFileName();if($this->copyFile()){return true;}else{$return = false;}}else{$return = false;}}else{$return = false;}if(!$return){$this->errorMess = $this->getError();}return $return;}}//获取错误信息public function getErrorMesg(){99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135return $this->errorMess;}//获取上传后文件名public function getNewName(){return $this->newName;}//复制保存文件protected function copyFile(){if(!$this->errorNum){$filepath = rtrim($this->path,'/').'/';$filepath .= $this->newName;if(@move_uploaded_file($this->tempName,$filepath)){ return true;}else{$this->setOption('errorNum',-3);return false;}}}//设置新文件名protected function setNewFileName(){if($this->israndname){$this->setOption('newName',$this->randName());}else{$this->setOption('newName',$this->originName);}}//产生随机文件名private function randName(){$str = date('YmdHis').rand(1000,9999);return $str.'.'.$this->fileType;}//检查文件大小是否超出允许上传文件大小protected function checkSize(){if($this->size<$this->filesize){$this->setOption('errorNum',-1);137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172}else{return true;}}//检查文件类型protected function checkType(){if(!in_array($this->fileType,$this->allowtype)){$this->setOption('errorNum',-2);return false;}else{return true;}}//设置_FILES相关信息protected function setFiles($name='',$error=0,$size=0,$tmp_name=''){ $this->setOption('errorNum',$error);if($error){return false;}$this->setOption('originName',$nam e);$this->setOption('tempName',$tmp_name);$type = explode('.',$name);$this->setOption('fileType',strtolower($type[count($type)-1]));$this->setOption('filesize',$size);return true;}//获取错误信息protected function getError(){$str = '文件上<span style="color:red;">'.$this->originNam e.'</span>传出错:';switch($this->errorNum){case 1:$str .= '上传文件超过了php.ini中upload_max_filesize选项的值';break;case 2:$str .= '上传文件超过了HTML表单中MAX_FILE_SIZE选项指定的值';174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209case 3:$str .= '文件只被部分上传';break;case 4:$str .= '没有文件被上传';break;case -1:$str .= '文件大小超出允许上传文件大小';break;case -2:$str .= '上传的文件类型不是被允许的类型';break;case -3:$str .= '上传失败';break;case -4:$str .= '目录创建失败,请重新设置上传目录';break;case -5:$str .= '上传目标地址不能为空';break;default:$str .= '上传失败,发现未知错误';}return $str.'<br>';}//上传路径检测protected function checkPath(){//路径为空if(empty($this->path)){$this->setOption('errorNum',-5);return false;}//路径不存在或不可写if(!file_exists($this->path) || !is_writable($this->path)){ if(!@mkdir($this->path,0755)){210 211 212 213 214 215 216$this->setOption('errorNum',-4);return false;}}return true;}//初始化数据,赋值函数private function setOption($key,$value){ $this->$key = $value;}}代码有点长,请的家见谅哈,不过学习PHP看长代码也是必经的一个阶段,必经天才不多嘛,嘿嘿……本文由:拔牙多少钱/提供!。