本文实例讲述了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程序设计有所帮助。