首页 > 代码库 > 封装一个文件上传并检测安全性、重命名的脚本

封装一个文件上传并检测安全性、重命名的脚本

 1 <?php
 2 
 3 /**
 4  *实现文件上传
 5  *@param array $file 上传的文件的五个信息
 6  *@param array $allow 允许文件上传的类型
 7  *@param string & $error 用来记录错误信息
 8  *@param string $part 文件上传目录
 9  *@param int $maxsize = 1048576
10  *@return mixed false|$nwename 失败就返回false,成功就返回新名字
11  */
12 
13  function upload($file,$allow,& $error,$path,$maxsize=1048576){
14     //1,先判断系统错误
15     switch($file[‘error‘]){
16         case 1 : $error = "上传失败,超出了文件大小的限制!";
17             return false;
18         case 2 : $error = "上传失败,超出了浏览器表单允许的文件大小!";
19             return false;
20         case 3 : $error = "上传失败,文件上传不完整!";
21             return false;
22         case 4 : $error = "上传失败,请先选择要上传的文件!";
23             return false;
24         case 6 : 
25         case 7 : $error = "对不起,服务器繁忙,请稍后再试!";
26             return false;
27     }
28 
29     //2验证逻辑错误--文件大小
30     if($file[‘size‘] > $maxsize){
31         $error = "上传失败,超出了文件大小的限制!";
32         return false;
33     }
34 
35     //文件类型
36     if(!in_array($file[‘type‘],$allow)){
37         $error = "上传文件类型不正确,允许的类型有:" . implode(‘,‘,$allow);
38         return false;
39     }
40     //3,移动临时文件
41     //3.1得到文件的新名字
42     $newname = randName($file[‘name‘]);
43     //3.2 确定文件存储路径
44     $target = $path . ‘/‘ . $newname;
45     //3.3 开始移动
46     $result = move_uploaded_file($file[‘tmp_name‘],$target);
47     if($result){
48         //上传成功
49         return $newname;
50     }else{
51         //上传失败
52         $error = "发生未知错误,上传失败!";
53         return false;
54     }
55 }
56 
57 /**
58  *生成一个随机名字的函数 = 当前时间戳 + 随机产生的字符
59  *@param string $filename 文件原始的名字
60  *@return string $newname 文件的新名字
61  *
62  */
63 
64 function randName($filename){
65     //1,生成文件名的时间戳部分
66     $newname = date("YmdHis");
67     //2,加上随机的几位数字
68     $str = "1234567890";
69     for($i=0;$i<6;$i++){
70         $newname .= $str[mt_rand(0,strlen($str)-1)];
71     }
72     //3,加上文件的后缀名
73     $newname .= strrchr($filename,‘.‘);
74     return $newname;
75 }

 

封装一个文件上传并检测安全性、重命名的脚本