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,多文件上传的主要内容,如果未能解决你的问题,请参考以下文章