一个完整的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 相关文章推荐
第十二节--类的自动加载
Nov 16 PHP
PHP开发中常用的8个小技巧
Aug 27 PHP
array_multisort实现PHP多维数组排序示例讲解
Jan 04 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
php中mysql连接方式PDO使用详解
Feb 25 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
php写app接口并返回json数据的实例(分享)
May 20 PHP
PHP实现SMTP邮件的发送实例
Sep 27 PHP
PHP实现微信提现功能(微信商城)
Nov 21 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
PHP教程 变量定义
2009/10/23 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
详解Python中time()方法的使用的教程
2015/05/22 Python
Python之文字转图片方法
2018/05/10 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
database面试题
2013/03/28 面试题
大客户销售经理职责
2013/12/04 职场文书
关于母亲节的感言
2014/02/04 职场文书
法定代表人授权委托书
2014/04/04 职场文书
聘用意向书
2014/07/29 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
在python中实现导入一个需要传参的模块
2021/05/12 Python
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers