101)PHP,多文件上传

Posted 小油菜123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

多文件上传的样子:

 

    

    

 

以上是关于101)PHP,多文件上传的主要内容,如果未能解决你的问题,请参考以下文章

如何实现用php上传视频文件?

php如何实现一次性上传多个文件

php单文件上传和多文件上传

php上传文件(上传后显示图片)

php 使用$_FILES 能否获得上传文件的绝对地址

PHP原生文件上传(单文件多文件均可)简单案例