欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

一个完美php文件上传类使用实例_PHP教程

程序员文章站 2022-05-24 12:02:13
...
这个文件上传类可以自定上传文件大小与上传文件类型及文件保存地址,使用起来也大兴非常的方法,有一个文就是如果是中文文件名是上传会是乱码,所以大家解决办法就是把页面保存成uft8即可解决。

今天终于算是可以来更新一下paperen的网站,嗯……因为写毕设论文写累了所以就发表一篇关于上传文件类的东东吧,这个类也是自己写的,不知道对大家有没有用,如果觉得可以就拿去用吧。不过在编码上面还是没做好,自己是在utf8的页面将数据进行提交的,所以生成的文件如果保持原来的中文名字的话在文件夹中看到就是乱码的名字,如果不想出现乱码的话需要进行一下编码的转换。?

代码如下 复制代码

define('NO_FILE', '不存在上传文件');
define('NOT_ALLOW_EXT', '文件类型不在允许范围内');
define('NOT_ALLOW_SIZE', '文件大小不在允许范围内');
define('HAS_THE_FILE', '该文件已经存在');
define('UPLOAD_FAILED', '上传失败');
define('UPLOAD_SUCCESS', '上传成功');

class file_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;

function ready($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;
}

function do_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 '';
}
}

function chk_ext(){
if(empty($this->allowext) || in_array($this->get_fileext(), explode("|",$this->allowext))) return false;
return true;
}

function chk_size(){
if(empty($this->allowsize) || get_filesize allowsize*1024*1024) return false;
return true;
}

function get_filesize(){
return $this->_filesize;
}

function get_fileext(){
return substr($this->_filename,strrpos($this->_filename,".")+1);
}

function generate_name(){
return substr(md5(time()),26);
}

function chk_hasfile(){
return is_file($this->_filedir.$this->_filename);
}

function error($tip){
echo $tip;
}

function result(){
if($this->report){
$filename = empty($this->newname) ? $this->_filename : $this->newname;
$arr = array('filename' => $filename, 'filesize' => $this->_filesize, 'tip' => UPLOAD_SUCCESS);
return $arr;
}else{
return UPLOAD_SUCCESS;
}
}
}

/***使用方法与参数说明***/
/***
第一个参数$dir 为上传文件存放的路径
第二个参数为$_FILES 为你那个上传文件变量
第三个参数允许文件大小 单位为MB
第四个参数允许的文件类型 格式为jpg|png|gif
第五个参数是否需要生成新的文件名
第六个参数为返回的提示格式 0为直接提示上传正确 1则返回一个数组array('filename' => $filename, 'filesize' => $this->_filesize, 'tip' => UPLOAD_SUCCESS);
***/

//require("类文件");
//$u = new file_uploader;
//$u->ready($dir, $_FILES['upload_file'], false, false, true, 0);
//echo $u->do_upload();

?>

随便说下这个类怎样调用吧,方法很简单?

代码如下 复制代码

$dir = 'upload/';
require("upload_class.php");
$u = new file_uploader;
$u->ready($dir, $_FILES['upload_file'], false, false, true, 0);
echo $u->do_upload();

就像N年前那个染头发的广告说的那句,“得左!染黑头发就是这么简单!”一样,这里上传文件的操作也是“上传文件就这么简单!”。当然那个$_FILES['upload_file']是对应表单中的file类型的控件的名字。而需不需要在上传后输出提示就看你自己啦,关于参数在代码那里面有详细说明,不过这里也是放出来吧。?

ready方法的参数说明:

第一个参数$dir 为上传文件存放的路径
第二个参数为$_FILES 为你那个上传文件变量
第三个参数允许文件大小 单位为MB
第四个参数允许的文件类型 格式为jpg|png|gif
第五个参数是否需要生成新的文件名
第六个参数为返回的提示格式 0为直接提示上传正确 1则返回一个数组array('filename' => 上传的文件名字, 'filesize' => 文件大小, 'tip' => 成功上传);?

很好!这样就完成了一篇文章,不过也花了不少时间呢……?

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632737.htmlTechArticle这个文件上传类可以自定上传文件大小与上传文件类型及文件保存地址,使用起来也大兴非常的方法,有一个文就是如果是中文文件名是上...