101)PHP,多文件上传

就是在之前的单文件上传的基础上加了一个函数:

 

    

 

    

  1 <?php
  2     /**
  3      * 上传函数
  4      * @param $tmp_file  $_FILES的五个信息,比如upload($_FILES('mingzi')
  5      * $_FILES里面的名字是你的对应的html代码中的上传文件的那个name
  6      * @return bool  失败返回false,成功就是true
  7      */
  8     $tmp_file=$_FILES['picture'];
  9     function upload($tmp_file){
 10     
 11         /**
 12          * 是否存在错误
 13          */
 14         
 15         if($tmp_file['error']!=0){
 16             echo '文件上传错误';
 17             return false;
 18         }
 19         /**
 20          * 尺寸,
 21          * 这个函数自己定的,但是应该是初始化设定的,就是这个值是变化的,不是一个固定的值。
 22          */
 23       
 24         $max_size=1024*1024;//自己设定的最大尺寸
 25         if($tmp_file['size']>$max_size){
 26             echo "文件过大";
 27             return false;
 28         }
 29         /**
 30          * 验证后缀名,
 31          * 用验证后缀和MIME方法
 32          */
 33                 //首先是验证后缀名
 34         $tmp_file_zhui=strrchr($tmp_file['name'],'.') ;
 35                 //strrchr函数是来剪切字符串的最后出现.的包括这个.后面的全部截取
 36         //后缀的映射数组,其实就是那个满足条件的后缀表(用关联数组表示)
 37         $tmp_file_zhui_list=array(
 38             '.png','.gif','.jpeg','.jpg'
 39         );
 40         if(!in_array($tmp_file_zhui,$tmp_file_zhui_list)){
 41             echo "文件格式有问题";
 42             return false;
 43         }
 44                 //就是那个$_FILES['type']有一个格式,下面的是对应那个映射表
 45         $tmp_file_zhui_MIMElist=array(
 46             '.png'=>array('image/png','image/x-png'),
 47             '.jpg'=>array('image/jpeg','image/x-pjpeg'),
 48             '.jpeg'=>array('image/jpeg','image/pjpeg'),
 49             '.gif'=>array('image/gif'),
 50         );
 51         $old_list=array();//下面直接用$old_list不行,我觉得这个就是声明,这是自己加的
 52         //得出真正的映射表,因为在我的后缀映射表中,可能不是这四个,一旦发生改动,我的下面的映射关系,我还得自己改,所以,我就用一个foreach,上面有什么后缀,我的下面就给他对应上什么$_FILE['type']格式,然后得到我要的MIME映射表
 53         foreach ($tmp_file_zhui_list as $value){
 54             foreach($tmp_file_zhui_MIMElist[$value] as $key=>$item){
 55 //               var_dump($tmp_file_zhui_MIMElist[$value][$key]);
 56                 $new_MIME_list=array_merge($old_list,(array)$tmp_file_zhui_MIMElist[$value][$key]);
 57                $old_list=$new_MIME_list;
 58             }
 59             
 60         }
 61         //去重
 62         $new_MIME_list=array_unique($new_MIME_list);
 63         
 64         //然后用MIME验证
 65         $phpfinfo=new finfo(FILEINFO_MIME_TYPE);
 66         $f_type=$phpfinfo->file($tmp_file['tmp_name']);
 67         echo $f_type;
 68         if(!in_array($f_type,$new_MIME_list)){
 69             echo "文件格式有误";
 70             return false;
 71         }
 72         //后缀验证完成。
 73         //建立一个文件夹,来存我的临时文件
 74         if(!is_dir('./wangchao')){
 75             mkdir('./wangchao');
 76         }
 77         
 78         $sub_dir_name=date('Y--m-d-H');//截取年月日小时
 79         //unipid是产生一个随机名字,可以试验一下  echo uniqid();
 80         move_uploaded_file($tmp_file['tmp_name'],'./wangchao/'.uniqid('wang_'.$sub_dir_name.'_').$tmp_file_zhui);
 81         return true;
 82     }
 83 upload($tmp_file);
 84 
 85 
 86 /*
 87         基本上的步骤就是:
 88                 ①看$_FILES['error']是否爆出错误
 89                 ②看文件的大小
 90                 ③看文件的格式,分为后缀和MIME验证
 91                 ④创建一个文件夹来存取临时上传文件
 92                 ⑤返回结果
 93 
 94  */
 95 function uploadsome($tmp_files){
 96     foreach($tmp_files as $key=>$value){
 97         $tmp_file['name']=$tmp_files['name'][$key];
 98         $tmp_file['type']=$tmp_files['type'][$key];
 99         $tmp_file['tmp_name']=$tmp_files['tmp_name'][$key];
100         $tmp_file['error']=$tmp_files['error'][$key];
101         $tmp_file['size']=$tmp_files['size'][$key];
102         upload($tmp_file);
103     }
104 }

 

多文件上传的样子:

 

    

    

 

posted @ 2017-08-24 12:29  小油菜1  阅读(150)  评论(0编辑  收藏  举报