加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php 多文件上传的处理方式

发布时间:2023-06-10 12:50:21 所属栏目:PHP教程 来源:
导读:关于多文件上传我们讲过很多了,下面是一个简单的普通form多文件上传类了,需要的朋友可以下载使用一下,代码如下:<?php class upload { public $up_ext=array(), $up_max=5210, $up_dir;

关于多文件上传我们讲过很多了,下面是一个简单的普通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(); 

             function __construct($name, $ext=array(), $rename=true) { 

                 if (!emptyempty($name)) { 

                     $this->up_name = $name; 

                     !emptyempty($ext) && $this->up_ext = $ext; 

                     $this->up_rename = $rename; 

                     $this->up_dir = website_dirroot. 

                                     $globals['cfg_upload_path'];                 

                     $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的文件!'); 

                     } 

                 } 

                 $this->chkupload(); 

             } 

             private function chkupload() { 

                 if (emptyempty($this->up_ext)) { 

                     $up_mime = array('image/wbmp', 'image/bmp', 'image/gif', 'image/pjpeg', 'image/x-png'); 

                     foreach ($this->up_files as $up_file) { 

                         $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)) { 

                     if (chmod($this->up_dir, 0777)) { 

                         if (!emptyempty($this->up_files)) { 

                             foreach ($this->up_files as $up_file) { 

                                 if (is_uploaded_file($up_file['tmp_name'])) { 

                                     $file_name = $up_file['name']; 

                                     if ($this->up_rename) { 

                                         $file_ext = end(explode('.', $file_name)); 

                                         $file_rnd = substr(md5(uniqid()), mt_rand(0, 26), 6);  

                                         $file_name = date('ymdhis').'_'.$file_rnd.'.'.$file_ext; 

                                     }  

                                     $file_name = $this->up_dir.'/'.$file_name; 

 

                                     if (move_uploaded_file($up_file['tmp_name'], $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协议传输格式方面的知识.

(编辑:银川站长网)

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