本文实例讲述了PHP实现多文件上传的方法。分享给大家供大家参考。具体实现方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
<?php define( 'ROOT' , 'D:/Program Files/www/test/' ); class Files_Tool{ protected static $allowExt = array ( '.jpg' , '.jpeg' , '.png' , '.gif' , '.bmp' , '.svg' , '.chm' , '.pdf' , '.zip' , '.rar' , '.tar' , '.gz' , '.bzip2' , '.ppt' , '.doc' ); public static $wrong = array (); public static $path = array (); protected static $error = array ( 0=> '文件上传失败,没有错误发生,文件上传成功' , 1=> '文件上传失败,上传的文件超过了 php.ini中upload_max_filesize 选项限制的值' , 2=> '文件上传失败,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值' , 3=> '文件上传失败,文件只有部分被上传' , 4=> '文件上传失败,没有文件被上传' , 5=> '文件上传失败,未允许的后缀' , 6=> '文件上传失败,找不到临时文件夹.PHP 4.3.10 和 PHP 5.0.3 引进' , 7=> '文件上传失败,文件写入失败.PHP 5.1.0 引进' , 8=> '文件上传失败,未接收到表单域的NAME' , 9=> '文件上传失败,,错误未知' ); public static function upload( $name ){ //检测是否接收到表单域的NAME if (!isset( $_FILES [ $name ])){ self:: $wrong []=8; return false; } //3维数组简化成2维数组 $files = array_shift ( $_FILES ); //获取后缀 $files =self::get_Ext( $files ); //处理文件次数 $n = count ( $files [ 'name' ]); for ( $i =0; $i < $n ; $i ++){ //查看当前文件是否有错误信息,有则跳过当前文件,处理下个文件 if ( $files [ 'error' ][ $i ]!=0){ self:: $wrong [ $i +1]= $files [ 'error' ][ $i ]; continue ; } //查看当前文件的后缀,是否允许,如果不允许,跳过当前文件 if (!in_array( $files [ 'name' ][ $i ],self:: $allowExt )){ self:: $wrong [ $i +1]=5; continue ; } //路径 $dir =self::time_Dir(); //文件名 $name =self::rand_Name(); //后缀 $ext = $files [ 'name' ][ $i ]; //文件位置 $path = $dir . $name . $ext ; //移动临时文件,如果失败,跳过当前文件 if (!move_uploaded_file( $files [ 'tmp_name' ][ $i ], $path )){ self:: $wrong [ $i ]=9; continue ; } //存入路径 self:: $path [ $i +1]= strtr ( $path , array (ROOT=> '' )); } return self:: $path ; } //获取后缀的方法 protected static function get_Ext( $arr ){ if (! is_array ( $arr ) || !isset( $arr [ 'name' ])){ return false;} foreach ( $arr [ 'name' ] as $k => $v ){ $arr [ 'name' ][ $k ]= strtolower ( strrchr ( $v , '.' )); } return $arr ; } //以日期生成路径 protected static function time_Dir(){ $dir =ROOT. 'Data/images/' . date ( 'Y/m/d/' ,time()); if (! is_dir ( $dir )){ mkdir ( $dir ,0777,true); } return $dir ; } //生成随机文件名 protected static function rand_Name(){ $str = str_shuffle ( '1234567890qwertyuiopasdfghjklzxcvbnm' ); $str = substr ( $str ,0,6); return $str ; } //错误接口 public static function errors(){ foreach (self:: $wrong as $k => $v ){ self:: $wrong [ $k ]= '第' . $k . '个' .self:: $error [ $k ]; } return self:: $wrong ; } } |
希望本文所述对大家的php程序设计有所帮助。