-
-
PHP图片上传类,经典方式,不过上传效率还算可以,我自己用过的一个类,当时对这个类做了些修改,以满足自己特定功能的需要,对PHP熟悉的,可对这个上传类做优化和修改,后附有调用方法,让PHP开发者上传图片轻松容易就做到,先上类代码:
001
<?php
002
class
FileUpload_Single
003
{
004
//user define -------------------------------------
005
var
$accessPath
;
006
var
$fileSize
=200;
007
var
$defineTypeList
=
"jpg|jpeg|gif|bmp"
;
//string jpg|gif|bmp ...
008
var
$filePrefix
=
"useruplod_"
;
//上传后的文件名前缀,可设置为空
009
var
$changNameMode
;
//图片改名的规则,暂时只有三类,值范围 : 0 至 2 任一值
010
var
$uploadFile
;
//array upload file attribute
011
var
$newFileName
;
012
var
$error
;
013
014
function
TODO()
015
{
//main 主类:设好参数,可以直接调用
016
$pass
= true ;
017
if
( !
$this
-> GetFileAttri() )
018
{
019
$pass
= false;
020
}
021
if
( !
$this
-> CheckFileMIMEType() )
022
{
023
$pass
= false;
024
$this
-> error .=
die
(
"<script language=\"javascript\">alert('图片类型不正确,允许格式:jpg|jpeg|gif|bmp。');history.back()</script>"
);
025
}
026
027
if
( !
$this
-> CheckFileAttri_size() )
028
{
029
$pass
= false;
030
$this
-> error .=
die
(
"<script language=\"javascript\">alert('上传的文件太大,请确保在200K以内。');history.back()</script>"
);
031
return
false;
032
}
033
034
if
( !
$this
-> MoveFileToNewPath() )
035
{
036
$pass
= false;
037
$this
-> error .=
die
(
"<script language=\"javascript\">alert('上传失败!文件移动发生错误!');history.back()</script>"
);
038
}
039
return
$pass
;
040
}
041
function
GetFileAttri()
042
{
043
foreach
(
$_FILES
as
$tmp
)
044
{
045
$this
-> uploadFile =
$tmp
;
046
}
047
return
(
empty
(
$this
-> uploadFile[
'name'
])) ? false : true;
048
}
049
050
function
CheckFileAttri_size()
051
{
052
if
( !
empty
(
$this
->
fileSize
))
053
{
054
if
(
is_numeric
(
$this
->
fileSize
))
055
{
056
if
(
$this
->
fileSize
> 0)
057
{
058
return
(
$this
-> uploadFile[
'size'
] >
$this
->
fileSize
* 1024) ? false : true ;
059
}
060
}
061
else
062
{
063
return
false;
064
}
065
}
066
else
067
{
068
return
false;
069
}
070
}
071
function
ChangeFileName (
$prefix
= NULL ,
$mode
)
072
{
// string $prefix , int $mode
073
$fullName
= (isset(
$prefix
)) ?
$prefix
.
"_"
: NULL ;
074
switch
(
$mode
)
075
{
076
case
0 :
$fullName
.= rand( 0 , 100 ).
"_"
.
strtolower
(
date
(
"ldSfFYhisa"
)) ;
break
;
077
case
1 :
$fullName
.= rand( 0 , 100 ).
"_"
.time();
break
;
078
case
2 :
$fullName
.= rand( 0 , 10000 ) . time();
break
;
079
default
:
$fullName
.= rand( 0 , 10000 ) . time();
break
;
080
}
081
return
$fullName
;
082
}
083
function
MoveFileToNewPath()
084
{
085
$newFileName
= NULL;
086
$newFileName
=
$this
-> ChangeFileName(
$this
-> filePrefix , 2 ).
"."
.
$this
-> GetFileTypeToString();
087
//检查目录是否存在,不存在则创建,当时我用的时候添加了这个功能,觉得没用的就注释掉吧
088
/*
089
$isFile = file_exists( $this -> accessPath);
090
clearstatcache();
091
if( ! $isFile && !is_dir($this -> accessPath) )
092
{
093
echo $this -> accessPath;
094
@mkdir($this -> accessPath);
095
}*/
096
$array_dir
=
explode
(
"/"
,
$this
-> accessPath);
//把多级目录分别放到数组中
097
for
(
$i
=0;
$i
<
count
(
$array_dir
);
$i
++){
098
$path
.=
$array_dir
[
$i
].
"/"
;
099
if
(!
file_exists
(
$path
)){
100
mkdir
(
$path
);
101
}
102
}
103
/
104
if
( move_uploaded_file(
$this
-> uploadFile[
'tmp_name'
] ,
realpath
(
$this
-> accessPath ) .
"/"
.
$newFileName
) )
105
{
106
$this
-> newFileName =
$newFileName
;
107
return
true;
108
}
else
{
109
return
false;
110
}
111
/
112
}
113
function
CheckFileExist(
$path
= NULL)
114
{
115
return
(
$path
== NULL) ? false : ((
file_exists
(
$path
)) ? true : false);
116
}
117
function
GetFileMIME()
118
{
119
return
$this
->GetFileTypeToString();
120
}
121
function
CheckFileMIMEType()
122
{
123
$pass
= false;
124
$defineTypeList
=
strtolower
(
$this
->defineTypeList);
125
$MIME
=
strtolower
(
$this
-> GetFileMIME());
126
if
(!
empty
(
$defineTypeList
))
127
{
128
if
(!
empty
(
$MIME
))
129
{
130
foreach
(
explode
(
"|"
,
$defineTypeList
)
as
$tmp
)
131
{
132
if
(
$tmp
==
$MIME
)
133
{
134
$pass
= true;
135
}
136
}
137
}
138
else
139
{
140
return
false;
141
}
142
}
143
else
144
{
145
return
false;
146
}
147
return
$pass
;
148
}
149
150
function
GetFileTypeToString()
151
{
152
if
( !
empty
(
$this
-> uploadFile[
'name'
] ) )
153
{
154
return
substr
(
strtolower
(
$this
-> uploadFile[
'name'
] ) ,
strlen
(
$this
-> uploadFile[
'name'
] ) - 3 , 3 );
155
}
156
}
157
}
158
?>
以下是PHP上传类的调用方法,PHP代码如下:
01
<?php
02
include
'up.class.php'
;
//加载PHP上传类文件
03
if
(
empty
(
$HTTP_POST_FILES
[
'image_file'
][
'tmp_name'
]))
//判断接收数据是否为空
04
{
05
$tmp
=
new
FileUpload_Single;
06
$tmp
-> accessPath =
'upload'
;
//图片上传的目录,这里是当前目录下的upload目录,可自己修改
07
if
(
$tmp
-> TODO() )
08
{
09
$filename
=
$tmp
-> newFileName;
//生成的文件名
10
echo
"图片上传成功,路径为:upload/"
.
$filename
;
11
}
else
{
12
echo
$tmp
-> error;
13
}
14
}
15
else
{
16
echo
"没有图片数据可上传"
;
17
}
18
?>
-
PHP 原生态图片上传封装类
最新推荐文章于 2022-05-07 15:37:53 发布