Home > Backend Development > PHP Tutorial > PHP file upload and download (Part 2)_PHP tutorial

PHP file upload and download (Part 2)_PHP tutorial

WBOY
Release: 2016-07-12 09:05:56
Original
1207 people have browsed it

PHP file upload and download (Part 2)

If there is information that you do not want users to see, you can use the error suppression symbol @; of course, anything that can be echoed can be assigned to a variable;
Define the type of file uploaded by the user, put it in the array variable allowExt, and use if(!in_array(). The first parameter is to get the suffix name of the uploaded file. You can use the strtolower function to determine the suffix after the period '.' name, or you can also use the built-in extension function pathinfo (name of file, PATHINFO_EXTENSION) to determine. The second parameter is the array variable allowExt of the type allowed to be uploaded); but in this case, if the user uploads a virus information , just change the suffix name, you need to use getimagesize to get the image information. The basic information will include the width, height and type of the image, and some will also include channels and bits; if the user is allowed to upload more than just image types, then Use the Boolean value of flag to make the determination;
It should also be noted that the naming of files uploaded by users cannot be overwritten by duplicate names. You can use md5(uniqid(microtime(true),true)) or similar functions to determine;
Sometimes users need to upload to a certain directory of their own, they can use if (!files_exit(path)) to determine, if it does not exist, use mkdir ($path,0777,true) to customize the upload path;
After various determinations, this file can be encapsulated into a function, and the variables used below can be set as parameters of the function. Parameters can be passed when calling, and can be directly used when uploading multiple files in a single file. Just call the function, greatly simplifying the amount of code;
The basic idea of ​​single file upload is: first detect the error message, match one by one, use switch...case to output the corresponding error message ------> Check whether the type of file upload is in the array defined by yourself A certain one -----》Detect whether the uploaded file meets the size requirements in the specification----》Detect whether the file image and other contents are real image types, etc. (use flag and getimagesize to obtain information)----》Detect the file Whether it is uploaded through the http post method----》Define the name and path of the uploaded file (at this time, you need to check whether the path exists and whether the file with the same name exists, and rename it in an encrypted way) ---》The upload is successful and the details are returned Array variable or uploaded file name.
 1 <?php
 2 header(&#39;content-type:text/html;charset=utf-8&#39;);
 3 
 4 function upload($fileInfo,$allowExt = array(&#39;jpeg&#39;, &#39;jpg&#39;,  &#39;png&#39;,  &#39;gif&#39;, &#39;pdf&#39;), $maxSize = 2097152, $path = &#39;text&#39;, $flag = true)
 5 {
 6     $fileInfo = $_FILES[&#39;file1&#39;];
 7 //     $maxSize = 2097152; // 允许上传的最大字节数2M
 8     // $flag = true; // 检测是否真实类型
 9      // 允许上传的文件类型,直接放在参数里了 
10 //    $allowExt = array(
11 //         &#39;jpeg&#39;,
12 //         &#39;png&#39;,
13 //         &#39;png&#39;,
14 //         &#39;gif&#39;,
15 //         &#39;pdf&#39;
16 //     );
17     if(!is_array($allowExt)){
18         exit(&#39;系统错误&#39;);
19     }
20     // 1、判断错误号
21     if ($fileInfo[&#39;error&#39;] == 0) {
22         // 判断上传文件的大小www.Bkjia.com
23         if ($fileInfo[&#39;size&#39;] > $maxSize) {
24             exit(&#39;上传文件过大&#39;);
25         }
26         // 判断文件类型:两种方法--使用截取后缀名或者用自带扩展名的判定来判定
27         $ext = pathinfo($fileInfo[&#39;name&#39;], PATHINFO_EXTENSION);
28         $ext = strtolower(end(explode(&#39;.&#39;, $fileInfo[&#39;name&#39;])));
29         if (! in_array($ext, $allowExt)) {
30             exit(&#39;非法文件类型&#39;);
31         }
32         // 判断文件是否通过http post方式穿上的
33         if (! is_uploaded_file($fileInfo[&#39;tmp_name&#39;])) {
34             exit(&#39;文件不是通过http post方法传上来的&#39;);
35         }
36         if ($flag) {
37             if (! getimagesize($fileInfo[&#39;tmp_name&#39;])) {
38                 exit(&#39;不是真正的图片类型&#39;);
39             }
40         }
41         // 上传文件,先判定路径是否存在,如果不存在则建立
42        // $path = &#39;text&#39;;
43         if (! file_exists($path)) {
44             mkdir($path, 0777, true);
45             chmod($path, 0777);
46         }
47         
48         // 要确保文件名唯一,防止重名产生覆盖,使用加密函数md5,mcrotime表示微秒数,两个参数则为true;
49         $uniName = md5(uniqid(microtime(true), true)) . &#39;.&#39; . $ext;
50 //   测试是否可以加密输出      echo $uniName;
51 //         exit();
52         $destination = $path . &#39;/&#39; . $uniName;
53         if (move_uploaded_file($fileInfo[&#39;tmp_name&#39;], $destination)) {
54             // echo &#39;上传成功&#39;;可以不仅仅是显示返回成功,可以返回文件的信息内容等
55 //             return array(
56 //                 &#39;newName&#39; => $destination,
57 //                 &#39;size&#39; => $fileInfo[&#39;size&#39;],
58 //                 &#39;type&#39; => $fileInfo[&#39;type&#39;]
59 //             );
60             return $destination;
61             //如果只要一个文件名,则return $destination即可
62         } else {
63             echo &#39;上传失败&#39;;
64         }
65     } else {
66         // 匹配错误信息,与err号应该一一对应的
67         switch ($fileInfo[&#39;error&#39;]) {
68             case 1:
69                 $remindMes= &#39;上传文件超过了php配置文件中upload_max_filesize选项的值&#39;;
70                 break;
71             case 2:
72                $remindMes= &#39;上传文件超过了表单max_file_size选项的值&#39;;
73                 break;
74             case 3:
75                $remindMes=  &#39;文件部分被上传&#39;;
76                 break;
77             case 4:
78                 $remindMes= &#39;没有选择上传文件&#39;;
79                 break;
80             case 6:
81                 $remindMes=  &#39;沒有找到临时目录&#39;;
82                 break;
83             case 7:
84             
85             case 8:
86                $remindMes=  &#39;系统错误&#39;;
87                 break;
88         }
89         exit($remindMes);
90     }
91 }
Copy after login


www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1066541.htmlTechArticlePHP file upload and download (Part 2) If there is information that you don’t want users to see, you can use the error suppression symbol @; Of course, anything that can echo can be assigned to a variable; defined with...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template