一个完整的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 相关文章推荐
WML,Apache,和 PHP 的介绍
Oct 09 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
php+xml编程之SimpleXML的应用实例
Jan 24 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
php微信公众平台开发(四)回复功能开发
Dec 06 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
Aug 23 PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 22 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
openflashchart 2.0 简单案例php版
2012/05/21 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
2014/06/16 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
python生成指定尺寸缩略图的示例
2014/05/07 Python
python取代netcat过程分析
2018/02/10 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
Python中函数的返回值示例浅析
2019/08/28 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
某公司C#程序员面试题笔试题
2014/05/26 面试题
大学生职业生涯规划范文
2013/12/31 职场文书
工艺员岗位职责
2014/02/11 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
五心教育心得体会
2014/09/04 职场文书
导师对论文的学术评语
2015/01/04 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
教你用python实现12306余票查询
2021/06/30 Python
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python