您的位置:首页 > 编程语言 > PHP开发

经典的PHP文件上传类_代码

2016-10-21 20:23 471 查看
一个较经典的PHP文件上传类代码,虽然很老,但用的人还是挺多的,当初自己在用PHP做站的时候,就用了这个类。包括有调用的例子,对新手也友好,这个类可以上传图片和其它格式的文件,看你怎么设置了。另外这个上传类可对文件上传大小限制,可自动创建文件上传目录,类中的方法用好了,可以扩展较多的功能。

001
<?php
002
// $Id: upload.class.php,v 1.0 2001/10/14 14:06:57 whxbb Exp $
003
$UPLOAD_CLASS_ERROR
=
array
( 1 =>
'不允许上传该格式文件'
,
004
                             
2 =>
'目录不可写'
,
005
                             
3 =>
'文件已存在'
,
006
                             
4 =>
'不知名错误'
,
007
                             
5 =>
'文件太大'
008
                            
);
009
 
010
/**
011
* Purpose
012
* 文件上传
013
* Example
014
*
015
    
$fileArr['file'] =$file;
016
    
$fileArr['name'] =$file_name;
017
    
$fileArr['size'] =$file_size;
018
    
$fileArr['type'] =$file_type;
019
    
// 所允许上传的文件类型
020
    
$filetypes =array('gif','jpg','jpge','png');
021
    
// 文件上传目录
022
    
$savepath ="/usr/htdocs/upload/";
023
    
// 没有最大限制 0 无限制
024
    
$maxsize =0;
025
    
// 覆盖 0 不允许  1 允许
026
    
$overwrite =0;
027
    
$upload =new upload($fileArr,$file_name,$savepath,$filetypes,$overwrite,$maxsize);
028
    
if (!$upload->run())
029
    
{
030
     
echo   $upload->errmsg();
031
    
}
032
*
033
* @author whxbb(whxbb@21cn.com)
034
* @version 0.1
035
*/
036
class
upload
037
{
038
    
var

$file
;
039
    
var

$file_name
;
040
    
var

$file_size
;
041
    
var

$file_type
;
042
 
043
    
/** 保存名 */
044
    
var

$savename
;
045
    
/** 保存路径 */
046
    
var

$savepath
;
047
    
/** 文件格式限定 */
048
    
var

$fileformat
=
array
();
049
    
/** 覆盖模式 */
050
    
var

$overwrite
=0;
051
    
/** 文件最大字节 */
052
    
var

$maxsize
=0;
053
    
/** 文件扩展名 */
054
    
var

$ext
;
055
    
/** 错误代号 */
056
    
var

$errno
;
057
 
058
    
/**
059
     
* 构造函数
060
     
* @param $fileArr 文件信息数组 'file' 临时文件所在路径及文件名
061
                                    
'name' 上传文件名
062
                                    
'size' 上传文件大小
063
                                    
'type' 上传文件类型
064
     
* @param savename 文件保存名
065
     
* @param savepath 文件保存路径
066
     
* @param fileformat 文件格式限制数组
067
     
* @param overwriet 是否覆盖 1 允许覆盖 0 禁止覆盖
068
     
* @param maxsize 文件最大尺寸
069
     
*/
070
    
function

upload(
$fileArr
,
$savename
,
$savepath
,
$fileformat
,
$overwrite

=0,
$maxsize
=0) {
071
        
$this
->file =
$fileArr
[
'file'
];
072
        
$this
->file_name =
$fileArr
[
'name'
];
073
        
$this
->file_size =
$fileArr
[
'size'
];
074
        
$this
->file_type =
$fileArr
[
'type'
];
075
 
076
        
$this
->get_ext();
077
        
$this
->set_savepath(
$savepath
);
078
        
$this
->set_fileformat(
$fileformat
);
079
        
$this
->set_overwrite(
$overwrite
);
080
        
$this
->set_savename(
$savename
);
081
        
$this
->set_maxsize(
$maxsize
);
082
    
}
083
 
084
    
/** 上传  */
085
    
function

run()
086
    
{
087
        
/** 检查文件格式 */
088
        
if

(!
$this
->validate_format())
089
        
{
090
            
$this
->errno =1;
091
            
return

false;
092
        
}
093
        
/** 检查目录是否可写 */
094
        
if
(!@
is_writable
(
$this
->savepath))
095
        
{
096
            
$this
->errno =2;
097
            
return

false;
098
        
}
099
        
/** 如果不允许覆盖,检查文件是否已经存在 */
100
        
if
(
$this
->overwrite ==0 && @
file_exists
(
$this
->savepath.
$this
->savename))
101
        
{
102
            
$this
->errno =3;
103
            
return

false;
104
        
}
105
        
/** 如果有大小限制,检查文件是否超过限制 */
106
        
if

(
$this
->maxsize !=0 )
107
        
{
108
            
if

(
$this
->file_size >
$this
->maxsize)
109
            
{
110
                
$this
->errno =5;
111
                
return

false;
112
            
}
113
        
}
114
        
/** 文件上传 */
115
       
if
(!@
copy
(
$this
->file,
$this
->savepath.
$this
->savename))
116
       
{
117
            
$this
->errno =4;
118
            
return

false;
119
       
}
120
       
/** 删除临时文件 */
121
       
$this
->destory();
122
       
return

true;
123
    
}
124
 
125
    
/**
126
     
* 文件格式检查
127
     
* @access protect
128
     
*/
129
    
function

validate_format()
130
    
{
131
 
132
        
if

(!
is_array
(
$this
->fileformat)) 
// 没有格式限制
133
            
return

true;
134
       
$ext

=
strtolower
(
$this
->ext);
135
        
reset(
$this
->fileformat);
136
        
while
(list(
$var
,
$key
) =each(
$this
->fileformat))
137
        
{
138
            
if

(
strtolower
(
$key
) ==
$ext
)
139
                
return

true;
140
        
}
141
        
reset(
$this
->fileformat);
142
        
return

false;
143
    
}
144
 
145
    
/**
146
     
* 获取文件扩展名
147
     
* access public
148
     
*/
149
    
function

get_ext()
150
    
{
151
        
$ext

=
explode
(
"."
,
$this
->file_name);
152
        
$ext

=
$ext
[
count
(
$ext
) - 1];
153
        
$this
->ext =
$ext
;
154
    
}
155
    
/**
156
     
* 设置上传文件的最大字节限制
157
     
* @param $maxsize 文件大小(bytes) 0:表示无限制
158
     
* @access public
159
     
*/
160
    
function

set_maxsize(
$maxsize
)
161
    
{
162
        
$this
->maxsize =
$maxsize
;
163
    
}
164
 
165
    
/**
166
     
* 设置覆盖模式
167
     
* @param 覆盖模式 1:允许覆盖 0:禁止覆盖
168
     
* @access public
169
     
*/
170
    
function

set_overwrite(
$overwrite
)
171
    
{
172
        
$this
->overwrite =
$overwrite
;
173
    
}
174
 
175
    
/**
176
     
* 设置允许上传的文件格式
177
     
* @param $fileformat 允许上传的文件扩展名数组
178
     
* @access public
179
     
*/
180
    
function

set_fileformat(
$fileformat
)
181
    
{
182
        
$this
->fileformat =
$fileformat
;
183
    
}
184
 
185
    
/**
186
     
* 设置保存路径
187
     
* @param $savepath 文件保存路径:以 "/" 结尾
188
     
* @access public
189
     
*/
190
    
function

set_savepath(
$savepath
)
191
    
{
192
        
$this
->savepath =
$savepath
;
193
    
}
194
    
/**
195
     
* 设置文件保存名
196
     
* @savename 保存名,如果为空,则系统自动生成一个随机的文件名
197
     
* @access public
198
     
*/
199
    
function

set_savename(
$savename
)
200
    
{
201
        
if

(
$savename

==
''
// 如果未设置文件名,则生成一个随机文件名
202
        
{
203
            
srand ((double) microtime() * 1000000);
204
            
$rnd

=rand(100,999);
205
            
$name

=
date
(
'Ymdhis'
) +
$rnd
;
206
            
$name

=
$name
.
"."
.
$this
->ext;
207
        
}

else
{
208
            
$name

=
$savename
;
209
        
}
210
        
$this
->savename =
$name
;
211
    
}
212
    
/**
213
     
* 删除文件
214
     
* @param $file 所要删除的文件名
215
     
* @access public
216
     
*/
217
    
function

del(
$file
)
218
    
{
219
        
if
(!@unlink(
$file
))
220
        
{
221
            
$this
->errno =3;
222
            
return

false;
223
        
}
224
        
return

true;
225
    
}
226
    
/**
227
     
* 删除临时文件
228
     
* @access proctect
229
     
*/
230
    
function

destory()
231
    
{
232
        
$this
->del(
$this
->file);
233
    
}
234
 
235
    
/**
236
     
* 得到错误信息
237
    
* @access public
238
      
* @return error msg string or false
239
     
*/
240
    
function

errmsg()
241
    
{
242
        
global

$UPLOAD_CLASS_ERROR
;
243
        
 
244
        
if

(
$this
->errno ==0)
245
            
return

false;
246
        
else
247
            
return

$UPLOAD_CLASS_ERROR
[
$this
->errno];
248
    
}
249
}
250
?>
水平高的拿去自己扩展吧,PHP上传文件其实挺简单,而且这个类中的注释也很丰富,对使用帮助很大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图片 php 函数 class