php文件上传类可自动创建文件夹

  1. <?php   
  2. /*   
  3.  * 文件上传类   
  4.  upfile($path = "./", $format = "", $maxsize = 0, $over = 0)  :构造函数 参数(保存路径,上传格式,上传最大字节数,是否覆盖同名文件)  
  5.    
  6.    
  7.    
  8.  * 实例:  
  9.    
  10. <form action="f.php" method="post" enctype="multipart/form-data">   
  11.    
  12. //上传单文件  
  13.   if(isset($_FILES["files"]))  
  14.   {  
  15.      $filear=array();  
  16.      $filear = $f->upload("files");//返回上传后文件名  
  17.      echo $filear;  
  18.        
  19.   }  
  20.    
  21.    
  22.    
  23.  
  24. //上传多个不同文件域名称文件  
  25. if(isset($_FILES){  
  26.  foreach($_FILES as $key=>$val)  
  27.   $filear[] = $f->upload($key);//返回上传后文件名数组  
  28.  
  29.  */  
  30. class upfile{   
  31.  //上传文件信息   
  32.  var $filename;   
  33.  // 保存名   
  34.  var $savename;   
  35.  // 保存路径   
  36.  var $savepath;   
  37.  // 文件格式限定,为空时不限制格式   
  38.  var $format = "";   
  39.  // 覆盖模式   
  40.  var $overwrite = 0;   
  41.  /* $overwrite = 0 时不覆盖同名文件  
  42.   * $overwrite = 1 时覆盖同名文件  
  43.   */  
  44.  //文件最大字节   
  45.  var $maxsize = 210000000;   
  46.  //文件扩展名   
  47.  var $ext;   
  48.     
  49.  /* 构造函数  
  50.   * $path 保存路径  
  51.   * $format 文件格式(用逗号分开)  
  52.   * $maxsize 文件最大限制,0为默认值  
  53.   * $over 复盖参数  
  54.   */  
  55.  function upfile($path = "./"$format = ""$maxsize = 0, $over = 0){   
  56.   if(!file_exists($path)){   
  57.    $this->halt("指定的目录[ ".$path." ]不存在。");   
  58.   }   
  59.      
  60.   if(!is_writable($path)){   
  61.    $this->halt("指定的目录[ ".$path." ]不可写。");   
  62.   }   
  63.   $path = str_replace("\\","/", $path);  
  64.   $this->savepath = substr($path, -1) == "/" ? $path : $path."/";//保存路径  
  65.     
  66.   $this->overwrite = $over;//是否复盖相同名字文件  
  67.   $this->maxsize = !$maxsize ? $this->maxsize : $maxsize;//文件最大字节  
  68.   $this->format = $format;  
  69.  }  
  70.    
  71.  /*  
  72.   * 功能:检测并组织文件  
  73.   * $form      文件域名称  
  74.   * $filename 上传文件保存名称,为空或者上传多个文件时由系统自动生成名称  
  75.   * $filename = 1,并上传多个同文件域名称文件时,则文件保存为原上传文件名称。  
  76.   */  
  77.  function upload($form, $filename = ""){  
  78.   if(!isset($_FILES[$form])){  
  79.    $this->halt("指定的文件域名称不存在。");  
  80.   }else{  
  81.    $filear = $_FILES[$form];  
  82.   }  
  83.     
  84.   if(is_array($filear["name"])){//上传同文件域名称多个文件  
  85.    $outfile = array();//返回文件名称数组  
  86.    for($i = 0; $i < count($filear["name"]); $i++){  
  87.     $ar["name"] = $filear["name"][$i];  
  88.     $ar["tmp_name"] = $filear["tmp_name"][$i];  
  89.     $ar["size"] = $filear["size"][$i];  
  90.     $ar["error"] = $filear["error"][$i];  
  91.       
  92.     $this->getext($ar["name"]);//取得扩展名  
  93.     $this->set_savename($filename == 1 ? $ar["name"] : "");//设置保存文件名  
  94.     $outfile[] = $this->copyfile($ar);  
  95.    }  
  96.    return $outfile;  
  97.   }else{//上传单个文件  
  98.    $this->getext($filear["name"]);//取得扩展名  
  99.    $this->set_savename($filename);//设置保存文件名  
  100.    return $this->copyfile($filear);  
  101.   }  
  102.   return false;  
  103.  }  
  104.    
  105.  /*  
  106.   * 功能:检测并复制上传文件  
  107.   * $filear 上传文件资料数组  
  108.   */  
  109.  function copyfile($filear){  
  110.    
  111.   if($filear["size"] > $this->maxsize){  
  112.    $this->halt("上传文件 ".$filear["name"]." 大小超出系统限定值[".$this->maxsize." 字节],不能上传。");  
  113.   }  
  114.     
  115.   if(!$this->overwrite && file_exists($this->savename)){  
  116.    $this->halt($this->savename." 文件名已经存在。");  
  117.   }  
  118.     
  119.   if(!$this->chkext()){  
  120.    $this->halt($this->ext." 文件格式不允许上传。");  
  121.   }  
  122.     
  123.   if(!copy($filear["tmp_name"], $this->savepath.$this->savename)){  
  124.    $errors = array(0=>"文件上传成功",  
  125.        1=>"上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 ",  
  126.        2=>"上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 ",  
  127.        3=>"文件只有部分被上传。 ",  
  128.        4=>"没有文件被上传。 ");  
  129.    $this->halt($errors[$filear["error"]]);  
  130.   }else{  
  131.    @unlink($filear["tmp_name"]);//删除临时文件  
  132.    return $this->savename;//返回上传文件名  
  133.   }  
  134.  }  
  135.    
  136.  /*  
  137.   * 功能: 取得文件扩展名  
  138.   * $filename 为文件名称  
  139.   */  
  140.  function getext($filename){  
  141.   if($filename == "") return;  
  142.     
  143.   $ext = explode(".", $filename);  
  144.     
  145.   $this->ext = $ext[count($ext)-1];  
  146.  }  
  147.    
  148.  /*  
  149.   * 功能:检测文件类型是否允许  
  150.   */  
  151.  function chkext(){  
  152.   if($this->format == "" || in_array(strtolower($this->ext), explode(",", strtolower($this->format)))) return true;  
  153.   else return false;  
  154.  }  
  155.  /*  
  156.   * 功能: 设置文件保存名  
  157.   * $savename 保存名,如果为空,则系统自动生成一个随机的文件名  
  158.   */  
  159.  function set_savename($savename = ""){  
  160.   if ($savename == "") { // 如果未设置文件名,则生成一个随机文件名  
  161.    srand ((double) microtime() * 1000000);  
  162.    $rnd = rand(100,999);  
  163.    $name = date('U') + $rnd;  
  164.    $name = $name.".".$this->ext;  
  165.   } else {  
  166.    $name = $savename;  
  167.   }  
  168.   $this->savename = $name;  
  169.  }  
  170.    
  171.  /*  
  172.   * 功能:错误提示  
  173.   * $msg 为输出信息  
  174.   */  
  175.  function halt($msg){  
  176.   echo "<strong>注意:</strong>".$msg;  
  177.   exit;  
  178.  }  
  179.    
  180. /*  
  181.  
  182. *主要用来删除已上传的文件,不返回  
  183. *参数$file :文件路径  
  184. */   
  185.  
  186. function delete_file($file)   
  187. {   
  188.     if (file_exists($file))   
  189.     {   
  190.         $delete = chmod ($file, 0777);   
  191.         $delete = unlink($file);   
  192.         if(file_exists($file))   
  193.         {   
  194.             $filesys = eregi_replace("/","\\",$file);   
  195.             $delete = system("del $filesys");   
  196.             clearstatcache();   
  197.             if(file_exists($file))   
  198.             {   
  199.                 $delete = chmod ($file, 0777);   
  200.                 $delete = unlink($file);   
  201.                 $delete = system("del $filesys");    
  202.             }    
  203.         }    
  204.         clearstatcache();    
  205.     }    
  206. }    
  207.     
  208.     
  209. }   
  210. ?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值