一个完整的php文件上传类实例讲解
这个文件上传类可以自定上传文件大小与上传文件类型及文件保存地址,在使用过程中有一个问题就是如果是中文文件名进行上传就会出现乱码,所以大家解决办法就是把页面保存成uft8即可解决。
下面就是为大家分享的代码:
<?php
define('NO_FILE','不存在上传文件');
define('NOT_ALLOW_EXT','文件类型不在允许范围内');
define('NOT_ALLOW_SIZE','文件大小不在允许范围内');
define('HAS_THE_FILE','该文件已经存在');
define('UPLOAD_FAILED','上传失败');
define('UPLOAD_SUCCESS','上传成功');
classfile_uploader
{
var$_file;
var$_filesize;
var$_fileext;
var$_filedir;
var$_filename;
var$_filetmpname;
var$allowsize;
var$allowext;
var$neednewname;
var$newname;
var$syslang;
var$report;
functionready($filedir='',$file,$allowsize='',$allowext='',$neednewname=false,$report=0){
$this->_filedir=is_dir($filedir)?$filedir:'';
if(empty($file)||!isset($file['size'])||$file['size']==0)$this->error(NO_FILE);
$this->_filesize=$file['size'];
$this->_filename=$file['name'];
$this->_filetmpname=$file['tmp_name'];
$this->allowsize=$allowsize;
$this->allowext=$allowext;
$this->neednewname=($neednewname)?true:false;
$this->newname='';
$this->report=$report;
}
functiondo_upload(){
if(!is_uploaded_file($this->_filetmpname))$this->error(NO_FILE);
if($this->chk_ext()){
$this->error(NOT_ALLOW_EXT);
return'';
}
if($this->chk_size()){
$this->error(NOT_ALLOW_SIZE);
return'';
}
if($this->neednewname)$this->newname=$this->generate_name().".".$this->get_fileext();
if($this->chk_hasfile()){
$this->error(HAS_THE_FILE);
return'';
}
$filename=empty($this->newname)?@iconv('utf-8','gb2312',$this->_filename):$this->newname;
@chmod($this->_filedir.$filename,0777);
if(move_uploaded_file($this->_filetmpname,$this->_filedir.$filename)){
return$this->result();
}else{
$this->error(UPLOAD_FAILED);
return'';
}
}
functionchk_ext(){
if(empty($this->allowext)||in_array($this->get_fileext(),explode("|",$this->allowext)))returnfalse;
returntrue;
}
functionchk_size(){
if(empty($this->allowsize)||get_filesize<=$this->allowsize*1024*1024)returnfalse;
returntrue;
}
functionget_filesize(){
return$this->_filesize;
}
functionget_fileext(){
returnsubstr($this->_filename,strrpos($this->_filename,".")+1);
}
functiongenerate_name(){
returnsubstr(md5(time()),26);
}
functionchk_hasfile(){
returnis_file($this->_filedir.$this->_filename);
}
functionerror($tip){
echo$tip;
}
functionresult(){
if($this->report){
$filename=empty($this->newname)?$this->_filename:$this->newname;
$arr=array('filename'=>$filename,'filesize'=>$this->_filesize,'tip'=>UPLOAD_SUCCESS);
return$arr;
}else{
returnUPLOAD_SUCCESS;
}
}
}
/***使用方法与参数说明***/
/***
第一个参数$dir为上传文件存放的路径
第二个参数为$_FILES为你那个上传文件变量
第三个参数允许文件大小单位为MB
第四个参数允许的文件类型格式为jpg|png|gif
第五个参数是否需要生成新的文件名
第六个参数为返回的提示格式0为直接提示上传正确1则返回一个数组array('filename'=>$filename,'filesize'=>$this->_filesize,'tip'=>UPLOAD_SUCCESS);
***/
//require("类文件");
//$u=newfile_uploader;
//$u->ready($dir,$_FILES['upload_file'],false,false,true,0);
//echo$u->do_upload();
?>
调用方法
代码如下
$dir='upload/';
require("upload_class.php");
$u=newfile_uploader;
$u->ready($dir,$_FILES['upload_file'],false,false,true,0);
echo$u->do_upload();
补充说明:在编码上面还是有些问题,自己是在utf8的页面将数据进行提交的,所以生成的文件如果保持原来的中文名字的话在文件夹中看到就是乱码的名字,如果不想出现乱码的话需要进行一下编码的转换。
以上就是本文的全部内容,希望对大家的学习有所帮助。