加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php 多文件上传的处理技巧

发布时间:2022-07-18 14:07:42 所属栏目:PHP教程 来源:互联网
导读:关于多文件上传我们讲过很多了,下面是一个简单的普通form多文件上传类了,需要的朋友可以下载使用一下,代码如下: ?php class upload { public $up_ext=array(), $up_max=5210, $up_dir; private $up_name, $up_rename=true, $up_num=0, $up_files=array(), $u
  关于多文件上传我们讲过很多了,下面是一个简单的普通form多文件上传类了,需要的朋友可以下载使用一下,代码如下:
 
  <?php
      
         class upload {
               public $up_ext=array(), $up_max=5210, $up_dir;
               private $up_name, $up_rename=true, $up_num=0, $up_files=array(), $up_ret=array();
   
              
                       $this->initupload();
                   } else {
                       exit('upload文件域名称为空,初始化失败!');
                   }
               }
   
               private function initupload() {
                   if (is_array($_files[$this->up_name])) {
                       $up_arr = count($_files[$this->up_name]);
                       $up_all = count($_files[$this->up_name], 1);
                       $up_cnt = ($up_all - $up_arr) / $up_arr;
                       for ($i = 0; $i < $up_cnt; $i ++) {
                            if ($_files[$this->up_name]['error'][$i] != 4) {
                                $this->up_files[] = array(
                                    'tmp_name' => $_files[$this->up_name]['tmp_name'][$i],
                                    'name' => $_files[$this->up_name]['name'][$i],
                                    'type' => $_files[$this->up_name]['type'][$i],
                                    'size' => $_files[$this->up_name]['size'][$i],
                                    'error' => $_files[$this->up_name]['error'][$i]
                                );
                            }
                       }
                       $this->up_num = count($this->up_files);
                   } else {
                       if (isset($_files[$this->up_name])) {
                           $this->up_files = array(
                                'tmp_name' => $_files[$this->up_name]['tmp_name'],
                                'name' => $_files[$this->up_name]['name'],
                                'type' => $_files[$this->up_name]['type'],
                                'size' => $_files[$this->up_name]['size'],
                                'error' => $_files[$this->up_name]['error']
                           );
                           $this->up_num = 1;
                       } else {
                           exit('没找找到需要upload的文件!');
                       }
                   }
   
                            $up_allw = false;
                           foreach ($up_mime as $mime) {
                               if ($up_file['type'] == $mime) {
                                   $up_allw = true; break;
                               }
                           }  
                           !$up_allw && exit('不允许上传'.$up_file['type'].'格式的文件!');
   
                           if ($up_file['size'] / 1024 > $this->up_max) {
                               exit('不允许上传大于 '.$this->up_max.'k 的文件!');
                           }
                       }  
                   } else {
                       foreach ($this->up_files as $up_file) {
                           $up_ext = end(explode('.', $up_file['name']));
   
                           $up_allw = false;
                           foreach ($this->up_ext as $ext) {                              
                               if ($up_ext == $ext) {
                                   $up_allw = true; break;
                               }
                           }
                           !$up_allw && exit('不允许上传.'.$up_ext.'格式的文件!');
   
                           if ($up_file['size'] / 1024 > $this->up_max) {
                               exit('不允许上传大于 '.$this->up_max.'k 的文件!');
                           }
                       }
                   }
   
                   $this->uploading();
               }
   
               private function uploading() {
                   if (io::dircreate($this->up_dir)) {
 $file_name)) {
                                           $this->up_ret[] = str_replace(website_dirroot, '', $file_name);
                                       } else {
                                           exit('文件上传失败!');
                                       }
                                   }
                               }
                           }
                       } else {
                           exit('未开启写入权限!');
                       }
                   } else {
                       exit('上传目录创建失败!');
                   }
               }
   
               public function getupload() {
                   return emptyempty($this->up_ret) ? false : $this->up_ret;
               }
   
               function __destruct() {}
         }
  ?>
  大量文件或大体积文件的情况可以考虑调用组件解决(如前文提到的swfupload组件),然而有些情况只需要传递几个文件,而且文件体积并不太大,这种情况下使用组件则有点牛刀杀鸡的感觉,通过html自带的<input type="file">表单就可以实现需要的功能,关键在于后台接收程序的处理.
 
  php处理上传做的很方便,上传文件的信息通过服务器自动处理到$_files数组中,开发者只需要使用的内置处理函数简单操作就可以啦。asp教程开发者则没有这么幸运,官方并没有提供直接的处理方法,需要开发者自己设计,这时就需要开发者了解iis对enctype="multipart/form-data"表单的处理方式,iis把enctype="multipart/form-data"表单提交的数据存储成二进制数据,以二进制格式返回给开发者,开发者则需要通过lenb、midb的字节处理函数来分析获取的上传内容,客户端发送的具体表单数据格式,可以了解下http rfc1867协议传输格式方面的知识

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读