一个完整的php文件上传类实例讲解

 更新时间:2015年10月30日 13:43  点击:1527

这个文件上传类可以自定上传文件大小与上传文件类型及文件保存地址,在使用过程中有一个问题就是如果是中文文件名进行上传就会出现乱码,所以大家解决办法就是把页面保存成uft8即可解决。

下面就是为大家分享的代码:

<?phpdefine('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 <= $this->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();

补充说明:在编码上面还是有些问题,自己是在utf8的页面将数据进行提交的,所以生成的文件如果保持原来的中文名字的话在文件夹中看到就是乱码的名字,如果不想出现乱码的话需要进行一下编码的转换。

以上就是本文的全部内容,希望对大家的学习有所帮助。

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07