文件上传与下载学习笔记(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 }
时间: 2024-10-08 01:15:15

文件上传与下载学习笔记(2)---多文件、单文件、多个单文件函数封装的相关文章

文件上传与下载学习笔记(3)---面向对象方法实现文件上传

代码: 1 <?php 2 class uploadClass { 3 protected $filename; 4 protected $maxSize; 5 protected $allowExt; 6 protected $allowMime; 7 protected $uploadPath; 8 protected $imgFlag; 9 protected $fileInfo; 10 protected $error; 11 protected $ext; 12 protected $

文件上传与下载学习笔记(1)---文件上传原理及配置

一:原理:将客户端的文件上传到服务器端的临时目录,再将服务器端的临时文件移动到指定目录. 二:客户端的配置 表单的method必须为post方法 表单必须添加enctype="multipart/form-data"属性 二者缺一不可. 三:将临时文件移动到指定目录 两种方法:1:move_uploaded_file($filename, $destination) 2:copy($source, $dest) 四:php.ini中的配置 在php.ini中搜索uploads ,会看到

文件上传与下载学习笔记(4)---文件下载

对于图片格式.HTML格式的文件,浏览器可以直接解析,但是如果不想让浏览器解析,让浏览器下载怎么办? 1 <?php 2 header("content-disposition:attachment;filename=".basename("1.jpg"));//basename()的使用 3 header("content-length:".filesize("1.jpg")); //下载时提示文件大小 4 readf

JavaWeb学习总结(五十)——文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

JavaWeb学习总结,文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

Struts2学习总结——文件上传与下载

Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20

JavaWeb学习总结(五十)——文件上传和下载 http://www.cnblogs.com/xdp-gacl/p/4200090.html

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

JavaWeb学习总结——文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

Python入门学习-DAY32-链接循环与通信循环,粘包问题,远程控制,文件上传与下载

链接循环与通信循环 服务端 from socket import * IP = '127.0.0.1' PORT = 8181 ADDRESS = (IP, PORT) BUFSIZE = 1024 server = socket(AF_INET, SOCK_STREAM) server.bind(ADDRESS) server.listen(5) tag=True while tag: conn, addr = server.accept() while tag: try: data = co