一个实用的PHP多图片文件上传类,支持gif、jpg、jpeg、pjpeg、png格式的多图片上传功能,类中可限制图片类型、上传图片大小、设置上传目录、一些提交判断等功能。其实本类不局限于图片的上传,也可以上传TXT/RAR等文件类型,只是要修饰一下代码,相信你能搞定,下面帖出具体代码:
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
class
more_file_upload{
const
FILE_PATH=
'/uploadfile/'
;
//默认文件上传的目录,请自行修改
var
file_type;
var
file_type_array;
var
file_type_real_array;
var
file_type_string;
var
file_name;
var
file_size;
var
file_tmp_name;
var
file_error;
var
handledate;
static
totalsize=0;
function
__construct(file_name,file_error,file_size,file_tmp_name,file_type){
this->handledate=
date
(
'm-d-Y'
);
if
(!
empty
(file_name)){
this->file_name = file_name;
this->file_error = file_error;
this->file_size = file_size;
this->file_tmp_name = file_tmp_name;
this->file_type = file_type;
this->file_type_array =
array
(
'/'
,
'image/gif'
,
'image/jpg'
,
'image/jpeg'
,
'image/pjpeg'
,
'image/png'
);
this->file_type_real_array =
array
(0.1,
'jpg'
=>74707370,
'gif'
=>7173,
'bmp'
=>6677,
'png'
=>807871);
this->show_execute_message(this->file_error,this->file_name,this->file_type,this->file_size);
}
}
function
__destruct(){
this->file_name = NULL;
this->file_error = NULL;
this->file_size = NULL;
this->file_tmp_name = NULL;
this->file_type = NULL;
self::totalsize = 0;
}
function
show_execute_message(smfileerror,smfilename,smfiletype,smfilesize){
if
(smfileerror>0){
switch
(smfileerror){
case
1: smfilemessage=
'文件超过服务器的约定大小!'
;
break
;
case
2: smfilemessage=
'文件超过指定的文件大小!'
;
break
;
case
3: smfilemessage=
'文件只上传了部分!'
;
break
;
case
4:
echo
"this->file_name "
.
'文件上传失败!
;
break
;
}
self::__destruct();
}
else
{
smfiletypeflag =
array_search
(smfiletype,this->file_type_array);
//进行真实格式验证
if
(smfiletypeflag != false){
file =
fopen
(this->file_tmp_name,
"rb"
);
bin =
fread
(file, 10);
fclose(file);
strInfo = @unpack(
"c10chars"
, bin);
typeCode =
intval
(strInfo[
'chars1'
].strInfo[
'chars2'
]);
smfiletypeflag =
array_search
(typeCode, this->file_type_real_array);
if
(smfiletypeflag == false){
//判断是否是png图片
typeCode =
intval
(strInfo[
'chars2'
].strInfo[
'chars3'
].strInfo[
'chars4'
]);
smfiletypeflag =
array_search
(typeCode, this->file_type_real_array);
if
(smfiletypeflag == false){
//判断是否是jpg图片
$typeCode
=
intval
(strInfo[
'chars7'
].strInfo[
'chars8'
].strInfo[
'chars9'
].strInfo[
'chars10'
]);
smfiletypeflag =
array_search
(typeCode, this->file_type_real_array);
}
}
}
if
(
$smfiletypeflag
== false){
$smfilemessage
=
'文件类型不对,请核实!'
;
self::__destruct();
}
else
{
$resflag
=
$this
->move_file(
$this
->file_tmp_name,this->file_name);
if
(resflag == 1){
$smfilemessage
=
'文件上传成功!'
;
self::totalsize +=
intval
(
$smfilesize
);
self::__destruct();
}
else
{
$smfilemessage
=
'文件上传失败!'
;
self::__destruct();
}
}
}
$smfilesizeformat
=
$this
->size_BKM(smfilesize);
echo
'
}
function
move_file(mvfiletmp,mvfilename){
//移动文件
mvfilenamearr =
explode
(
'.'
,
basename
(mvfilename));
mvfilenamearr[0] = this->rand_string();
mvfilename = implode(
'.'
,mvfilenamearr);
if
(
is_uploaded_file
(mvfiletmp)){
uploadfile = self::FILE_PATH.
"mvfilename"
;
result = move_uploaded_file(mvfiletmp,uploadfile);
return
result;
}
}
function
rand_string(){
string = md5(uniqid(rand().microtime()));
return
string;
}
function
size_BKM(size){
// B/KB/MB单位转换
if
(size < 1024)
{
size_BKM = (string)size .
" B"
;
}
elseif
(size < (1024 * 1024))
{
size_BKM = number_format((double)(size / 1024), 1) .
" KB"
;
}
else
{
size_BKM = number_format((double)(size / (1024*1024)),1).
" MB"
;
}
return
size_BKM;
}
}
?>
|
可将代码复制到PHP文件中,保存文件名为:more_upload_file.class.php,使用时include。