当前位置:首页 > PHP教程 > php文件操作 > 列表

PHP实现的多文件上传类及用法示例

发布:smiling 来源: PHP粉丝网  添加日期:2019-07-30 11:26:01 浏览: 评论:0 

本文实例讲述了PHP实现的多文件上传类及用法。分享给大家供大家参考,具体如下:

1、upFiles.css.php 文件

  1. <?php 
  2.  
  3. class UploadFiles{ 
  4.  
  5.  private $maxsize = '1000000'//允许上传文件最大长度 
  6.  
  7.  private $allowtype = array('jpg','png','gif','jpeg');//允许上传文件类型 
  8.  
  9.  private $israndfile = true;//是否随机文件名 
  10.  
  11.  private $filepath;//上传路径 
  12.  
  13.  private $originName;//上传的源文件 
  14.  
  15.  private $tmpfileName;//临时文件名 
  16.  
  17.  private $newfileName;//新文件名 
  18.  
  19.  private $fileSize;//文件大小 
  20.  
  21.  private $fileType;//文件类型 
  22.  
  23.  private $errorNum = 0;//错误号 
  24.  
  25.  private $errorMessg = array();//错误消息 
  26.  
  27.  //对成员初始化 
  28.  
  29.  function __construct($options = array()){ 
  30.  
  31.  foreach($options as $key=>$val){ 
  32.  
  33.   $key = strtolower($key); 
  34.  
  35.   //查看传进来的数组里下标是否与成员属性相同 
  36.  
  37.   //print_r(array_keys(get_class_vars(get_class($this)))); 
  38.  
  39.   if(!in_array($key,array_keys(get_class_vars(get_class($this))))){ 
  40.  
  41.   continue
  42.  
  43.   }else
  44.  
  45.   $this->setOption($key,$val); 
  46.  
  47.   } 
  48.  
  49.  } 
  50.  
  51.  } 
  52.  
  53.  private function setOption($key,$val){ 
  54.  
  55.    $this->$key = $val
  56.  
  57.  //echo $this->errorNum."<br>"; 
  58.  
  59.  } 
  60.  
  61.  //检查文件上传路径 
  62.  
  63.  private function checkfilePath(){ 
  64.  
  65.  //echo $this->filepath; 
  66.  
  67.  if(emptyempty($this->filepath)){ 
  68.  
  69.   $this->setOption('errorNum',"-5"); 
  70.  
  71.   return false; 
  72.  
  73.  } 
  74.  
  75.  if(!file_exists($this->filepath) || !is_writable($this->filepath)){ 
  76.  
  77.   if(!@mkdir($this->filepath,0755)){ 
  78.  
  79.   $this->setOption('errorNum','-4'); 
  80.  
  81.   return false; 
  82.  
  83.   } 
  84.  
  85.  } 
  86.  
  87.  return true; 
  88.  
  89.  } 
  90.  
  91.  //获取错误信息 
  92.  
  93.  private function getError(){ 
  94.  
  95.  $str = "上传文件{$this->originName}出错---"
  96.  
  97.  switch($this->errorNum){ 
  98.  
  99.   case 4; $str .= "没有文件被上传";break
  100.  
  101.   case 3; $str .= "文件只被部分上传";break
  102.  
  103.   case 2; $str .= "超过文件表单允许大小";break
  104.  
  105.   case 1; $str .= "超过php.ini中允许大小";break
  106.  
  107.   case -1; $str .= "未允许的类型";break
  108.  
  109.   case -2; $str .= "文件过大,不能超过".$this->maxsize."个字节";break
  110.  
  111.   case -3; $str .= "上传失败";break
  112.  
  113.   case -4; $str .= "建立文件上传目录失败";break
  114.  
  115.   case -5; $str .= "必须指定上传路径";break
  116.  
  117.   default$str .= "未知错误"
  118.  
  119.  } 
  120.  
  121.  return $str."<br>"
  122.  
  123.  } 
  124.  
  125.  //检查文件类型 
  126.  
  127.  private function checkfileType(){ 
  128.  
  129.  //echo $this->fileType; 
  130.  
  131.  if(!in_array(strtolower($this->fileType),$this->allowtype)){ 
  132.  
  133.  $this->setOption('errorNum','-1'); 
  134.  
  135.   return false; 
  136.  
  137.  }else
  138.  
  139.   return true; 
  140.  
  141.  } 
  142.  
  143.  } 
  144.  
  145.  //检查文件大小 
  146.  
  147.  private function checkfileSize(){ 
  148.  
  149.  if($this->fileSize > $this->maxsize){ 
  150.  
  151.   $this->setOption('errorNum','-2'); 
  152.  
  153.   return false; 
  154.  
  155.  }else
  156.  
  157.   return true; 
  158.  
  159.  } 
  160.  
  161.  } 
  162.  
  163.  //处理随机文件名称 
  164.  
  165.  private function prorandFile(){ 
  166.  
  167.  $ch = $this->israndfile; 
  168.  
  169.  if($ch == 'true'){ 
  170.  
  171.   return true; 
  172.  
  173.  }else
  174.  
  175.   return false; 
  176.  
  177.  } 
  178.  
  179.  } 
  180.  
  181.  // 
  182.  
  183.  private function setFiles($name="",$tmp_name="",$size="",$error=""){ 
  184.  
  185.  //检查上传路径 
  186.  
  187.  if(!$this->checkfilePath()){ 
  188.  
  189.   //$this->errorMessg = $this->getError(); 
  190.  
  191.   return false; 
  192.  
  193.  } 
  194.  
  195.  //echo $error."<br>"; 
  196.  
  197.  if($error){ 
  198.  
  199.  $this->setOption('errorNum',$error); 
  200.  
  201.   return false; 
  202.  
  203.  } 
  204.  
  205.  $arrstr  = explode('.',$name); 
  206.  
  207.  $type   = end($arrstr); 
  208.  
  209.  $this->setOption('originName',$name); 
  210.  
  211.  $this->setOption('fileSize',$size); 
  212.  
  213.  $this->setOption('fileType',$type); 
  214.  
  215.  $this->setOption('tmpfileName',$tmp_name); 
  216.  
  217.  return true; 
  218.  
  219.  } 
  220.  
  221.  //检查是否有文件上传 
  222.  
  223.  function checkFile($formname){ 
  224.  
  225.  if(!@$_FILES[$formname]){ 
  226.  
  227.   $this->setOption('errorNum',4); 
  228.  
  229.   return false; 
  230.  
  231.  }else
  232.  
  233.   return true; 
  234.  
  235.  } 
  236.  
  237.  } 
  238.  
  239.  //上传文件 
  240.  
  241.  function uploadeFile($formname){ 
  242.  
  243.  if(!$this->checkFile($formname)){ 
  244.  
  245.   $this->errorMessg = $this->getError(); 
  246.  
  247.   return false; 
  248.  
  249.  } 
  250.  
  251.  $return  = true; 
  252.  
  253.  $name   = @$_FILES[$formname]['name']; 
  254.  
  255.  $tmp_name = @$_FILES[$formname]['tmp_name']; 
  256.  
  257.  $size   = @$_FILES[$formname]['size']; 
  258.  
  259.  $error  = @$_FILES[$formname]['error']; 
  260.  
  261.  //$type   = $_FILES[$formname]['type']; 
  262.  
  263.  if(is_array($name)){ 
  264.  
  265.   $errors = array(); 
  266.  
  267.   for($i=0; $i<count($name); $i++){="" if($this-="">setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){ 
  268.  
  269.    if(!$this->checkfileSize() || !$this->checkfileType()){ 
  270.  
  271.    $errors[] = $this->getError(); 
  272.  
  273.    $return = false; 
  274.  
  275.    } 
  276.  
  277.   }else
  278.  
  279.    $errors[] = $this->getError(); 
  280.  
  281.    $return = false; 
  282.  
  283.   } 
  284.  
  285.   if(!$return$this->setFiles(); 
  286.  
  287.   } 
  288.  
  289.   if($return){ 
  290.  
  291.   $newfileN = array(); 
  292.  
  293.   for($i=0; $i<count($name); $i++){="" if($this-="">setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){ 
  294.  
  295.    if(!$this->copyFile()){ 
  296.  
  297.     $errors[] = $this->getError(); 
  298.  
  299.     $return = false; 
  300.  
  301.    }else
  302.  
  303.     $newfileN[] = $this->newfileName; 
  304.  
  305.    } 
  306.  
  307.    } 
  308.  
  309.    $this->newfileName = $newfileN
  310.  
  311.   } 
  312.  
  313.   } 
  314.  
  315.   //print_r($errors); 
  316.  
  317.   $this->errorMessg = $errors
  318.  
  319.   //echo $errors; 
  320.  
  321.   return $return
  322.  
  323.  }else
  324.  
  325.   if($this->setFiles($name,$tmp_name,$size,$error)){ 
  326.  
  327.   $return = true; 
  328.  
  329.   if($error) var_dump($error); 
  330.  
  331.   if($this->checkfileSize() && $this->checkfileType()){ 
  332.  
  333.   }else
  334.  
  335.    $return = false; 
  336.  
  337.   } 
  338.  
  339.   }else
  340.  
  341.   $return = false; 
  342.  
  343.   } 
  344.  
  345.   if(!$return){ 
  346.  
  347.   $this->errorMessg = $this->getError(); 
  348.  
  349.   } 
  350.  
  351.   return $return
  352.  
  353.  } 
  354.  
  355.  } 
  356.  
  357.  //获取上传后的文件名 
  358.  
  359.  function getnewFile(){ 
  360.  
  361.   return $this->newfileName; 
  362.  
  363.  } 
  364.  
  365.  //把文件拷贝到指定的路径 
  366.  
  367.  function copyFile(){ 
  368.  
  369.  $filepath = rtrim($this->filepath,'/')."/"
  370.  
  371.  if(!$this->errorNum){ 
  372.  
  373.   if($this->prorandFile()){ 
  374.  
  375.    $this->newfileName = date('Ymdhis').rand(1000,9999).".".$this->fileType
  376.  
  377.   }else
  378.  
  379.    $this->newfileName = $this->originName; 
  380.  
  381.   } 
  382.  
  383.   if(!move_uploaded_file($this->tmpfileName,$filepath.$this->newfileName)){ 
  384.  
  385.   $this->setOption('errorNum',-3); 
  386.  
  387.   return false; 
  388.  
  389.   }else
  390.  
  391.   return true; 
  392.  
  393.   } 
  394.  
  395.  }else
  396.  
  397.   return false; 
  398.  
  399.  } 
  400.  
  401.  } 
  402.  
  403.  //上传错误后返回的消息 
  404.  
  405.  function gteerror(){ 
  406.  
  407.   $err = $this->errorMessg; 
  408.  
  409.  return $err
  410. //phpfensi.com 
  411.  } 
  412.  
  413.  } 
  414.  
  415. ?> 
  416.  
  417. </count($name);></count($name);> 

2、使用方法

uploade.php 文件:

  1. <?php 
  2.  
  3. //print_r($_FILES['spic']); 
  4.  
  5. header('Content-Type:text/html;charset=utf-8'); 
  6.  
  7. //if(@$_FILES['spic'])echo "ddddddddd";; 
  8.  
  9. include('upFiles.css.php'); 
  10.  
  11. $upfile = new UploadFiles(array('filepath'=>'./upload','allowtype'=>array('php','bmp','gif','jpg','png'),'israndfile'=>true,'maxsize'=>'1000000')); 
  12.  
  13. if($upfile ->uploadeFile('spic')){ 
  14.  
  15.  $arrfile = $upfile ->getnewFile(); 
  16.  
  17.  foreach($arrfile as $v){ 
  18.  
  19.  echo $v,"<br>"
  20.  
  21.  } 
  22.  
  23.  echo "上传成功!"
  24.  
  25. }else
  26.  
  27.  $err = $upfile ->gteerror(); 
  28.  
  29.  if(is_array($err)){ 
  30.  
  31.  foreach($err as $v1){ 
  32.  
  33.   echo $v1,"<br>"
  34.  
  35.  } 
  36.  
  37.  }else
  38.  
  39.  echo $err
  40. //phpfensi.com 
  41.  } 
  42.  
  43.  //var_dump($err); 
  44.  
  45.  
  46. //var_dump($upfile); 
  47.  
  48. ?> 

HTML 文件:

  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
  2.  
  3. <title>无标题文档</title> 
  4.  
  5. <script type="text/javascript"> 
  6.  
  7. function Check(){ 
  8.  
  9.  //alert('dddd'); 
  10.  
  11.  for(i=1; i<9; i++){ 
  12.  
  13.  if(document.getElementById('v'+i).value == ''){ 
  14.  
  15.   document.getElementById('v'+i).name = 'uu'
  16.  
  17.  } 
  18.  
  19.  } 
  20.  
  21.  
  22. </script> 
  23.  
  24.   
  25.  
  26.   
  27.  
  28. <form name="upfile" action="uploade.php" method="post" enctype="multipart/form-data"> 
  29.  
  30. <input type="file" name="spic[]" id="v1"><br> 
  31.  
  32. <input type="file" name="spic[]" id="v2"><br> 
  33.  
  34. <input type="file" name="spic[]" id="v3"><br> 
  35.  
  36. <input type="file" name="spic[]" id="v4"><br> 
  37.  
  38. <input type="file" name="spic[]" id="v5"><br> 
  39.  
  40. <input type="file" name="spic[]" id="v6"><br> 
  41.  
  42. <input type="file" name="spic[]" id="v7"><br> 
  43.  
  44. <input type="file" name="spic[]" id="v8"><br> 
  45.  
  46. <input type="submit" name="sub" value="提交" onclick="return Check()"> 
  47.  
  48. <input type="reset" name="res" value="重填"> 
  49.  
  50. </form> 

Tags: PHP多文件上传

分享到: