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


Posted in PHP onOctober 27, 2015

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

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

<?php
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 <= $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的页面将数据进行提交的,所以生成的文件如果保持原来的中文名字的话在文件夹中看到就是乱码的名字,如果不想出现乱码的话需要进行一下编码的转换。

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

PHP 相关文章推荐
php print EOF实现方法
May 21 PHP
PHP新手入门学习方法
May 08 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 PHP
php中3种方法删除字符串中间的空格
Mar 10 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
php使用pdo连接mssql server数据库实例
Dec 25 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
Jun 13 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
Nov 25 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
PHP实现一个多功能购物网站的案例
Sep 13 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 PHP
php邮件发送的两种方式
Apr 28 #PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 #PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 #PHP
PHP测试成功的邮件发送案例
Oct 26 #PHP
php使用APC实现实时上传进度条功能
Oct 26 #PHP
php需登录的文件上传管理系统
Mar 21 #PHP
PHP文件缓存类实现代码
Oct 26 #PHP
You might like
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
支持oicq头像的留言簿(一)
2006/10/09 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
JavaScript 学习笔记二 字符串拼接
2010/03/28 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
Python try except else使用详解
2021/01/12 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
英国日常交易网站:Wowcher
2018/09/04 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
员工自我鉴定范文
2013/10/06 职场文书
数学检讨书1000字
2014/02/24 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
李强优秀员工观后感
2015/06/16 职场文书
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python
frg-100简单操作(设置)说明
2022/04/05 无线电