PHP实现的多文件上传类及用法示例
本文实例讲述了PHP实现的多文件上传类及用法。分享给大家供大家参考,具体如下:
1、upFiles.css.php文件
<?php classUploadFiles{ private$maxsize='1000000';//允许上传文件最大长度 private$allowtype=array('jpg','png','gif','jpeg');//允许上传文件类型 private$israndfile=true;//是否随机文件名 private$filepath;//上传路径 private$originName;//上传的源文件 private$tmpfileName;//临时文件名 private$newfileName;//新文件名 private$fileSize;//文件大小 private$fileType;//文件类型 private$errorNum=0;//错误号 private$errorMessg=array();//错误消息 //对成员初始化 function__construct($options=array()){ foreach($optionsas$key=>$val){ $key=strtolower($key); //查看传进来的数组里下标是否与成员属性相同 //print_r(array_keys(get_class_vars(get_class($this)))); if(!in_array($key,array_keys(get_class_vars(get_class($this))))){ continue; }else{ $this->setOption($key,$val); } } } privatefunctionsetOption($key,$val){ $this->$key=$val; //echo$this->errorNum."<br>"; } //检查文件上传路径 privatefunctioncheckfilePath(){ //echo$this->filepath; if(empty($this->filepath)){ $this->setOption('errorNum',"-5"); returnfalse; } if(!file_exists($this->filepath)||!is_writable($this->filepath)){ if(!@mkdir($this->filepath,0755)){ $this->setOption('errorNum','-4'); returnfalse; } } returntrue; } //获取错误信息 privatefunctiongetError(){ $str="上传文件{$this->originName}出错---"; switch($this->errorNum){ case4;$str.="没有文件被上传";break; case3;$str.="文件只被部分上传";break; case2;$str.="超过文件表单允许大小";break; case1;$str.="超过php.ini中允许大小";break; case-1;$str.="未允许的类型";break; case-2;$str.="文件过大,不能超过".$this->maxsize."个字节";break; case-3;$str.="上传失败";break; case-4;$str.="建立文件上传目录失败";break; case-5;$str.="必须指定上传路径";break; default;$str.="未知错误"; } return$str."<br>"; } //检查文件类型 privatefunctioncheckfileType(){ //echo$this->fileType; if(!in_array(strtolower($this->fileType),$this->allowtype)){ $this->setOption('errorNum','-1'); returnfalse; }else{ returntrue; } } //检查文件大小 privatefunctioncheckfileSize(){ if($this->fileSize>$this->maxsize){ $this->setOption('errorNum','-2'); returnfalse; }else{ returntrue; } } //处理随机文件名称 privatefunctionprorandFile(){ $ch=$this->israndfile; if($ch=='true'){ returntrue; }else{ returnfalse; } } // privatefunctionsetFiles($name="",$tmp_name="",$size="",$error=""){ //检查上传路径 if(!$this->checkfilePath()){ //$this->errorMessg=$this->getError(); returnfalse; } //echo$error."<br>"; if($error){ $this->setOption('errorNum',$error); returnfalse; } $arrstr=explode('.',$name); $type=end($arrstr); $this->setOption('originName',$name); $this->setOption('fileSize',$size); $this->setOption('fileType',$type); $this->setOption('tmpfileName',$tmp_name); returntrue; } //检查是否有文件上传 functioncheckFile($formname){ if(!@$_FILES[$formname]){ $this->setOption('errorNum',4); returnfalse; }else{ returntrue; } } //上传文件 functionuploadeFile($formname){ if(!$this->checkFile($formname)){ $this->errorMessg=$this->getError(); returnfalse; } $return=true; $name=@$_FILES[$formname]['name']; $tmp_name=@$_FILES[$formname]['tmp_name']; $size=@$_FILES[$formname]['size']; $error=@$_FILES[$formname]['error']; //$type=$_FILES[$formname]['type']; if(is_array($name)){ $errors=array(); for($i=0;$i<count($name);$i++){ if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){ if(!$this->checkfileSize()||!$this->checkfileType()){ $errors[]=$this->getError(); $return=false; } }else{ $errors[]=$this->getError(); $return=false; } if(!$return)$this->setFiles(); } if($return){ $newfileN=array(); for($i=0;$i<count($name);$i++){ if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){ if(!$this->copyFile()){ $errors[]=$this->getError(); $return=false; }else{ $newfileN[]=$this->newfileName; } } $this->newfileName=$newfileN; } } //print_r($errors); $this->errorMessg=$errors; //echo$errors; return$return; }else{ if($this->setFiles($name,$tmp_name,$size,$error)){ $return=true; if($error)var_dump($error); if($this->checkfileSize()&&$this->checkfileType()){ }else{ $return=false; } }else{ $return=false; } if(!$return){ $this->errorMessg=$this->getError(); } return$return; } } //获取上传后的文件名 functiongetnewFile(){ return$this->newfileName; } //把文件拷贝到指定的路径 functioncopyFile(){ $filepath=rtrim($this->filepath,'/')."/"; if(!$this->errorNum){ if($this->prorandFile()){ $this->newfileName=date('Ymdhis').rand(1000,9999).".".$this->fileType; }else{ $this->newfileName=$this->originName; } if(!move_uploaded_file($this->tmpfileName,$filepath.$this->newfileName)){ $this->setOption('errorNum',-3); returnfalse; }else{ returntrue; } }else{ returnfalse; } } //上传错误后返回的消息 functiongteerror(){ $err=$this->errorMessg; return$err; } } ?>
2、使用方法
uploade.php文件:
<?php //print_r($_FILES['spic']); header('Content-Type:text/html;charset=utf-8'); //if(@$_FILES['spic'])echo"ddddddddd";; include('upFiles.css.php'); $upfile=newUploadFiles(array('filepath'=>'./upload','allowtype'=>array('php','bmp','gif','jpg','png'),'israndfile'=>true,'maxsize'=>'1000000')); if($upfile->uploadeFile('spic')){ $arrfile=$upfile->getnewFile(); foreach($arrfileas$v){ echo$v,"<br/>"; } echo"上传成功!"; }else{ $err=$upfile->gteerror(); if(is_array($err)){ foreach($erras$v1){ echo$v1,"<br/>"; } }else{ echo$err; } //var_dump($err); } //var_dump($upfile); ?>
HTML文件:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <title>无标题文档</title> <scripttype="text/javascript"> functionCheck(){ //alert('dddd'); for(i=1;i<9;i++){ if(document.getElementById('v'+i).value==''){ document.getElementById('v'+i).name='uu'; } } } </script> </head> <body> <formname="upfile"action="uploade.php"method="post"enctype="multipart/form-data"> <inputtype="file"name="spic[]"id="v1"/><br/> <inputtype="file"name="spic[]"id="v2"/><br/> <inputtype="file"name="spic[]"id="v3"/><br/> <inputtype="file"name="spic[]"id="v4"/><br/> <inputtype="file"name="spic[]"id="v5"/><br/> <inputtype="file"name="spic[]"id="v6"/><br/> <inputtype="file"name="spic[]"id="v7"/><br/> <inputtype="file"name="spic[]"id="v8"/><br/> <inputtype="submit"name="sub"value="提交"onclick="returnCheck()"/> <inputtype="reset"name="res"value="重填"/> </form> </body> </html>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。