文件上传与下载学习笔记(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 }

 

posted @ 2015-04-10 10:19  ericliu001  阅读(155)  评论(0编辑  收藏  举报