文件上传与下载学习笔记(2)---多文件、单文件、多个单文件函数封装
一:前导知识点:
1:is_string()判断一个变量是否是字符串 is_array 判断一个变量是否是数组
2:pathinfo()函数可以获取文件的扩展名。
3:创建目录函数 mkdir()
4: 生成唯一的随机数 uniqid()
5:判断文件、目录是否存在file_exsits()
二:思路与流程
三:封装的函数代码
1 <?php 2 /** 3 * 得到想要的文件类型 4 * @return unknown 5 */ 6 function getFiles() { 7 $i = 0; 8 foreach ( $_FILES as $file ) { 9 // 判断是单文件 10 if (is_string ( $file ['name'] )) { 11 $files [$i] = $file; 12 $i ++; 13 // 判断是多文件 14 } elseif (is_array ( $file ['name'] )) { 15 foreach ( $file ['name'] as $k => $v ) { 16 $files [$k] ['name'] = $v; 17 $files [$k] ['type'] = $file ['type'] [$k]; 18 $files [$k] ['tmp_name'] = $file ['tmp_name'] [$k]; 19 $files [$k] ['error'] = $file ['error'] [$k]; 20 $files [$k] ['size'] = $file ['size'] [$k]; 21 } 22 } 23 } 24 return $files; 25 } 26 /** 27 * 上传文件 28 * @param unknown $fileInfo 29 * @return string 30 */ 31 function uploadFiles($fileInfo, $path = "ttt",$allowExt = array ('jpg','jpeg','png','gif' ),$maxSize = 20000000,$flag = false) { 32 //通过pathinfo得到文件扩展名 33 $ext = pathinfo ( $fileInfo ['name'],PATHINFO_EXTENSION ); 34 //得到文件的唯一名称 35 $uniName = md5 ( uniqid ( microtime ( true ), true ) ) . '.' . $ext; 36 $destination = $path . '/' . $uniName; 37 $res ['mes'] = null; 38 //如果目录不存在,创建目录 39 if (! file_exists ( $path )) { 40 mkdir ( $path, 0777, true ); 41 } 42 // 判断错误号 43 if ($fileInfo ['error'] == 0) { 44 // 判断文件大小 45 if ($fileInfo ['size'] > $maxSize) { 46 $res ['mes'] = $fileInfo['name']."上传文件过大"; 47 } 48 // 判断文件类型 49 if (! in_array ( $ext, $allowExt )) { 50 $res ['mes'] = $fileInfo['name']." 文件格式不正确"; 51 } 52 // 判断是否是真的图片 53 if ($flag) { 54 if (! getimagesize ( $fileInfo ['tmp_name'] )) { 55 $res ['mes'] = $fileInfo['name']."不是真的图片"; 56 } 57 } 58 // 判断是否通过HTTP POST 方式上传 59 if (! is_uploaded_file ( $fileInfo ['tmp_name'] )) { 60 $res ['mes'] = $fileInfo['name']."文件上传途径不正确"; 61 } 62 // 如果有值,就结束返回 63 if ($res ['mes']) 64 return $res; 65 // 移动文件 66 if (move_uploaded_file ( $fileInfo ['tmp_name'], $destination )) { 67 $res ['mes'] = $fileInfo['name']."文件上传成功"; 68 $res ['dst'] = $destination; 69 } 70 return $res; 71 } else { 72 switch ($fileInfo['error']) { 73 case 1 : 74 $res ['mes']= $fileInfo['name'].'上传文件超过了upload_max_filesize 选项的值'; 75 break; 76 case 2 : 77 $res ['mes']= $fileInfo['name'].'超过了表单MAX_FILE_SIZE限制的大小'; 78 break; 79 case 3 : 80 $res ['mes']= $fileInfo['name'].'文件上传不完整'; 81 break; 82 case 4 : 83 $res ['mes']= $fileInfo['name'].'没有选择上传文件'; 84 break; 85 case 6 : 86 $res ['mes']= $fileInfo['name'].'没有找到临时目录'; 87 break; 88 case 7 : 89 $res ['mes']= $fileInfo['name'].'文件写入失败'; 90 break; 91 case 8 : 92 $res ['mes']= $fileInfo['name'].'文件上传被php扩展程序中断'; 93 break; 94 } 95 return $res; 96 } 97 }