单文件上传、多文件上传

实现的一个多功能上传文件程序,可以满足单文件上传或者多文件上传

<?php
/*
* upMoreFile(string $fname, string $fpath, string $ftype) 上传多文件处理
* string $fname 上传的表单里 file 名
* string $fpath 文件保存路径,保存路径请使用 '/'
* string $ftype 设定上传文件的类型
* string $ftypeAdd 增加上传文件类型, 添加多个类型请用 ',' 分开
*/
function upMoreFile( $fname, $fpath, $ftype='img', $ftypeAdd = '' )
{
 /*
 * 设置上传路径的数组
 */
 $uppath = array();
 /*
 * 判断上传的文件是否是数组
 */
 if(is_array($_FILES[$fname]['tmp_name'])) {
  $utmp_name = $_FILES[$fname]['tmp_name'];
  $uerror = $_FILES[$fname]['error'];
  $uname = $_FILES[$fname]['name'];
  $num = count($_FILES[$fname]['tmp_name']);
 } else {
  $utmp_name = array($_FILES[$fname]['tmp_name']);
  $uerror = array($_FILES[$fname]['error']);
  $uname = array($_FILES[$fname]['name']);
  $num = 1;
 }
  /*
  * 循环处理上传文件
  */
 for ($i = 0; $i < $num; $i++) { // 循环处理
   /*
   * 检查是否有上传错误
   */
  if(empty($utmp_name[$i])) {
   continue;
  }
  if($uerror[$i] > 0) {
      switch($uerror[$i]){
    case "1":
     echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
     return $uppath;
    case "2":
     echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
     return $uppath;
    case "3":
     echo "文件只有部分被上传";
     return $uppath;
    case "4":
     echo "没有文件被上传";
     return $uppath;
    case "6":
     echo "找不到临时文件夹。";
     return false;
    case "7":
     echo "文件写入失败";
     return $uppath;
   }
  }
     
      /*
      *  判断是否是通过 HTTP POST 方法传输
      */
  if( is_uploaded_file( $utmp_name[$i] ) )
  {
       /*
       * 获取上传文件类型
       */
   $name = basename( $uname[$i] );
   $type = explode( '.', $name );
   $uptype = strtolower( $type[count( $type )-1] );
    
    /*
       * $ftype 设定上传文件的类型,根据 $ftype 选择默认的正确文件类型
       */
   switch ($ftype) {
    case 'img':
     $typearr = array( 'jpg', 'png', 'gif', 'bmp', 'jpeg' );
     break;
    case 'tar':
     $typearr = array( 'zip', 'rar', 'gz', 'tar' );
     break;
    case 'off':
     $typearr = array('doc', 'xls', 'ppt');
     break;
    case 'txt':
     $typearr = array('txt');
     break;
   }
    
   /*
   * string $ftypeAdd 增加上传文件类型, 将添加的类型加到已有数组里
      */
   if( $ftypeAdd != '') {
    $typeAdd  = explode(',', $ftypeAdd);
       $typearr = array_merge($typeAdd, $typearr);
   }
    
   /*
   * 验证获取的类型是否存在于默认的类型,以及添加的类型中
   */
   if( !in_array( $uptype, $typearr ) )
   {
       echo "<script>alert('输入的类型不正确')</script>";
    return $uppath;
   }
    
   /*
   * 设置保存路径及文件名
   */
   if(!is_dir($fpath)) {
    //生成指定的目录
    $array_dir=explode("/",$fpath);//把多级目录分别放到数组中
    $path = '';
    foreach($array_dir as $value){
     $path .= $value."/";
     if(!file_exists($path)){
      mkdir($path, 0777);
     }
    }
   }
   $upfile = time();
   $rand = rand(1, 1000);
   $upfilename = $fpath.$upfile.'_'.$rand.".".$uptype;
    
   /*
   * 复制文件到指定路径下
   */
   if( move_uploaded_file( $utmp_name[$i], $upfilename ) )
   {
       $uppath[] = $upfilename;
   }
   else
   {
    echo "<script>alert('上传失败')</script>";
    return $uppath;
   }
  } else {
   return $uppath;
  }
 } // 循环处理结束
 return $uppath;
}
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值