1 <?php
2 /**
3 * 文件上传
4 * @param array $file 文件上传的信息(是一个数组,有5个元素)
5 * @param array $allow 允许的文件上传的类型
6 * @param string & $error 引用传递,用来记录错误信息
7 * @param string $path 文件上传目录
8 * @param int $maxsize = 1024*1024 允许文件上传的大小
9 * @param mixed false/$newname 如果上传失败就返回false , 成功就返回文件的新名字
10 */
11
12 function upload($file,$allow,&$error,$path,$maxsize=1048576){
13 switch($file['error']){
14 case 1 : $error = '上传的文件超过了选项限制的值!';
15 return false;
16 case 2 : $error = '上传文件的大小超过了选项指定的值!';
17 return false;
18 case 3 : $error = '文件只有部分被上传!';
19 return false;
20 case 4 : $error = '没有选择文件被上传!';
21 return false;
22 case 6 :
23 case 7 : $error = '文件写入失败,系统繁忙!';
24 return false;
25 }
26
27 // 判断文件的大小
28 if($file['size'] > $maxsize){
29 $error = '文件上传过大!';
30 return false;
31 }
32
33 if(!in_array($file['type'],$allow)){
34 $error = '文件上传类型不存在,允许上传是类型有:' . implode(',',$allow);
35 return false;
36 }
37
38 $newname = randname($file['name']);
39 $target = $path . '/' . $newname;
40 $result = move_uploaded_file($file['tmp_name'],$target);
41 if($result){
42 return $newname;
43 }else{
44 $error = '发生未知错误,上传失败!';
45 return false;
46 }
47 }
48
49 /**
50 * 生成一个随机名字的函数,文件名 = 当前时间加上随机数
51 * @param string $filename 文件原始名字
52 * @return string $newname 文件的新名字
53 */
54 function randname($filename){
55 $newname = date('YmdHis');
56 //随机后面的数字
57 $str = "abcdefghijklmnopqrstuvwxyz";
58 for($i = 0;$i < 6;$i++){
59 $newname .= $str[mt_rand(0,strlen($str) - 1)];
60 }
61 $newname .= strrchr($filename,'.');
62 return $newname;
63 }