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 }