本文实例讲述了PHP实现的多文件上传类及用法。分享给大家供大家参考,具体如下:
1、upFiles.css.php 文件
<?php class UploadFiles{ 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($options as $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); } } } private function setOption($key,$val){ $this->$key = $val; //echo $this->errorNum.\"<br>\"; } //检查文件上传路径 private function checkfilePath(){ //echo $this->filepath; if(empty($this->filepath)){ $this->setOption(\'errorNum\',\"-5\"); return false; } if(!file_exists($this->filepath) || !is_writable($this->filepath)){ if(!@mkdir($this->filepath,0755)){ $this->setOption(\'errorNum\',\'-4\'); return false; } } return true; } //获取错误信息 private function getError(){ $str = \"上传文件{$this->originName}出错---\"; switch($this->errorNum){ case 4; $str .= \"没有文件被上传\";break; case 3; $str .= \"文件只被部分上传\";break; case 2; $str .= \"超过文件表单允许大小\";break; case 1; $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>\"; } //检查文件类型 private function checkfileType(){ //echo $this->fileType; if(!in_array(strtolower($this->fileType),$this->allowtype)){ $this->setOption(\'errorNum\',\'-1\'); return false; }else{ return true; } } //检查文件大小 private function checkfileSize(){ if($this->fileSize > $this->maxsize){ $this->setOption(\'errorNum\',\'-2\'); return false; }else{ return true; } } //处理随机文件名称 private function prorandFile(){ $ch = $this->israndfile; if($ch == \'true\'){ return true; }else{ return false; } } // private function setFiles($name=\"\",$tmp_name=\"\",$size=\"\",$error=\"\"){ //检查上传路径 if(!$this->checkfilePath()){ //$this->errorMessg = $this->getError(); return false; } //echo $error.\"<br>\"; if($error){ $this->setOption(\'errorNum\',$error); return false; } $arrstr = explode(\'.\',$name); $type = end($arrstr); $this->setOption(\'originName\',$name); $this->setOption(\'fileSize\',$size); $this->setOption(\'fileType\',$type); $this->setOption(\'tmpfileName\',$tmp_name); return true; } //检查是否有文件上传 function checkFile($formname){ if(!@$_FILES[$formname]){ $this->setOption(\'errorNum\',4); return false; }else{ return true; } } //上传文件 function uploadeFile($formname){ if(!$this->checkFile($formname)){ $this->errorMessg = $this->getError(); return false; } $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; } } //获取上传后的文件名 function getnewFile(){ return $this->newfileName; } //把文件拷贝到指定的路径 function copyFile(){ $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); return false; }else{ return true; } }else{ return false; } } //上传错误后返回的消息 function gteerror(){ $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 = new UploadFiles(array(\'filepath\'=>\'./upload\',\'allowtype\'=>array(\'php\',\'bmp\',\'gif\',\'jpg\',\'png\'),\'israndfile\'=>true,\'maxsize\'=>\'1000000\')); if($upfile ->uploadeFile(\'spic\')){ $arrfile = $upfile ->getnewFile(); foreach($arrfile as $v){ echo $v,\"<br/>\"; } echo \"上传成功!\"; }else{ $err = $upfile ->gteerror(); if(is_array($err)){ foreach($err as $v1){ echo $v1,\"<br/>\"; } }else{ echo $err; } //var_dump($err); } //var_dump($upfile); ?>
HTML 文件:
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\"> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <title>无标题文档</title> <script type=\"text/javascript\"> function Check(){ //alert(\'dddd\'); for(i=1; i<9; i++){ if(document.getElementById(\'v\'+i).value == \'\'){ document.getElementById(\'v\'+i).name = \'uu\'; } } } </script> </head> <body> <form name=\"upfile\" action=\"uploade.php\" method=\"post\" enctype=\"multipart/form-data\"> <input type=\"file\" name=\"spic[]\" id=\"v1\" /><br/> <input type=\"file\" name=\"spic[]\" id=\"v2\" /><br/> <input type=\"file\" name=\"spic[]\" id=\"v3\" /><br/> <input type=\"file\" name=\"spic[]\" id=\"v4\" /><br/> <input type=\"file\" name=\"spic[]\" id=\"v5\" /><br/> <input type=\"file\" name=\"spic[]\" id=\"v6\" /><br/> <input type=\"file\" name=\"spic[]\" id=\"v7\" /><br/> <input type=\"file\" name=\"spic[]\" id=\"v8\" /><br/> <input type=\"submit\" name=\"sub\" value=\"提交\" onclick=\"return Check()\" /> <input type=\"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程序设计有所帮助。
本文地址:https://www.stayed.cn/item/17958
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我