PHP实现的多文件上传类及用法示例
程序员文章站
2024-04-02 11:27:34
本文实例讲述了php实现的多文件上传类及用法。分享给大家供大家参考,具体如下:
1、upfiles.css.php 文件
本文实例讲述了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程序设计有所帮助。
下一篇: PHP框架性能测试报告