当前位置:首页 > PHP教程 > php上传下载 > 列表

php 多文件上传的处理方法

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-04 16:02:51 浏览: 评论:0 

关于多文件上传我们讲过很多了,下面是一个简单的普通form多文件上传类了,需要的朋友可以下载使用一下,代码如下:

  1. <?php 
  2.     
  3.        class upload { 
  4.              public $up_ext=array(), $up_max=5210, $up_dir
  5.              private $up_name$up_rename=true, $up_num=0, $up_files=array(), $up_ret=array(); 
  6.  
  7.              function __construct($name$ext=array(), $rename=true) { 
  8.                  if (!emptyempty($name)) { 
  9.                      $this->up_name = $name
  10.                      !emptyempty($ext) && $this->up_ext = $ext
  11.                      $this->up_rename = $rename
  12.                      $this->up_dir = website_dirroot. 
  13.                                      $globals['cfg_upload_path'];                 
  14.                      $this->initupload(); 
  15.                  } else { 
  16.                      exit('upload文件域名称为空,初始化失败!'); 
  17.                  } 
  18.              } 
  19.  
  20.              private function initupload() { 
  21.                  if (is_array($_files[$this->up_name])) { 
  22.                      $up_arr = count($_files[$this->up_name]); 
  23.                      $up_all = count($_files[$this->up_name], 1); 
  24.                      $up_cnt = ($up_all - $up_arr) / $up_arr
  25.                      for ($i = 0; $i < $up_cnt$i ++) { 
  26.                           if ($_files[$this->up_name]['error'][$i] != 4) { 
  27.                               $this->up_files[] = array
  28.                                   'tmp_name' => $_files[$this->up_name]['tmp_name'][$i], 
  29.                                   'name' => $_files[$this->up_name]['name'][$i], 
  30.                                   'type' => $_files[$this->up_name]['type'][$i], 
  31.                                   'size' => $_files[$this->up_name]['size'][$i], 
  32.                                   'error' => $_files[$this->up_name]['error'][$i
  33.                               ); 
  34.                           } 
  35.                      } 
  36.                      $this->up_num = count($this->up_files); 
  37.                  } else { 
  38.                      if (isset($_files[$this->up_name])) { 
  39.                          $this->up_files = array
  40.                               'tmp_name' => $_files[$this->up_name]['tmp_name'], 
  41.                               'name' => $_files[$this->up_name]['name'], 
  42.                               'type' => $_files[$this->up_name]['type'], 
  43.                               'size' => $_files[$this->up_name]['size'], 
  44.                               'error' => $_files[$this->up_name]['error'
  45.                          ); 
  46.                          $this->up_num = 1; 
  47.                      } else { 
  48.                          exit('没找找到需要upload的文件!'); 
  49.                      } 
  50.                  } 
  51.  
  52.                  $this->chkupload(); 
  53.              } 
  54.  
  55.              private function chkupload() { 
  56.                  if (emptyempty($this->up_ext)) { 
  57.                      $up_mime = array('image/wbmp''image/bmp''image/gif''image/pjpeg''image/x-png'); 
  58.                      foreach ($this->up_files as $up_file) { 
  59.                          $up_allw = false; 
  60.                          foreach ($up_mime as $mime) { 
  61.                              if ($up_file['type'] == $mime) { 
  62.                                  $up_allw = true; break
  63.                              } 
  64.                          }  
  65.                          !$up_allw && exit('不允许上传'.$up_file['type'].'格式的文件!'); 
  66.  
  67.                          if ($up_file['size'] / 1024 > $this->up_max) { 
  68.                              exit('不允许上传大于 '.$this->up_max.'k 的文件!'); 
  69.                          } 
  70.                      }  
  71.                  } else { 
  72.                      foreach ($this->up_files as $up_file) { 
  73.                          $up_ext = end(explode('.'$up_file['name'])); 
  74.  
  75.                          $up_allw = false; 
  76.                          foreach ($this->up_ext as $ext) {                              
  77.                              if ($up_ext == $ext) { 
  78.                                  $up_allw = true; break
  79.                              } 
  80.                          } 
  81.                          !$up_allw && exit('不允许上传.'.$up_ext.'格式的文件!'); 
  82.  
  83.                          if ($up_file['size'] / 1024 > $this->up_max) { 
  84.                              exit('不允许上传大于 '.$this->up_max.'k 的文件!'); 
  85.                          } 
  86.                      } 
  87.                  } 
  88.  
  89.                  $this->uploading(); 
  90.              } 
  91.  
  92.              private function uploading() { 
  93.                  if (io::dircreate($this->up_dir)) { 
  94.                      if (chmod($this->up_dir, 0777)) { 
  95.                          if (!emptyempty($this->up_files)) { 
  96.                              foreach ($this->up_files as $up_file) { 
  97.                                  if (is_uploaded_file($up_file['tmp_name'])) { 
  98.                                      $file_name = $up_file['name']; 
  99.                                      if ($this->up_rename) { 
  100.                                          $file_ext = end(explode('.'$file_name)); 
  101.                                          $file_rnd = substr(md5(uniqid()), mt_rand(0, 26), 6);  
  102.                                          $file_name = date('ymdhis').'_'.$file_rnd.'.'.$file_ext
  103.                                      }  
  104.                                      $file_name = $this->up_dir.'/'.$file_name
  105.  
  106.                                      if (move_uploaded_file($up_file['tmp_name'], $file_name)) { 
  107.                                          $this->up_ret[] = str_replace(website_dirroot, ''$file_name); 
  108.                                      } else { 
  109.                                          exit('文件上传失败!'); 
  110.                                      } 
  111.                                  } 
  112.                              } 
  113.                          } 
  114.                      } else { 
  115.                          exit('未开启写入权限!'); 
  116.                      } 
  117.                  } else { 
  118.                      exit('上传目录创建失败!'); 
  119.                  } 
  120.              } 
  121.  
  122.              public function getupload() { 
  123.                  return emptyempty($this->up_ret) ? false : $this->up_ret; 
  124.              } 
  125.  
  126.              function __destruct() {} 
  127.        } 
  128. ?> 

大量文件或大体积文件的情况可以考虑调用组件解决(如前文提到的swfupload组件),然而有些情况只需要传递几个文件,而且文件体积并不太大,这种情况下使用组件则有点牛刀杀鸡的感觉,通过html自带的<input type="file">表单就可以实现需要的功能,关键在于后台接收程序的处理.

php处理上传做的很方便,上传文件的信息通过服务器自动处理到$_files数组中,开发者只需要使用的内置处理函数简单操作就可以啦。asp教程开发者则没有这么幸运,官方并没有提供直接的处理方法,需要开发者自己设计,这时就需要开发者了解iis对enctype="multipart/form-data"表单的处理方式,iis把enctype="multipart/form-data"表单提交的数据存储成二进制数据,以二进制格式返回给开发者,开发者则需要通过lenb、midb的字节处理函数来分析获取的上传内容,客户端发送的具体表单数据格式,可以了解下http rfc1867协议传输格式方面的知识.

Tags: php 多文件 上传处理方法

分享到: