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

5年以前  |  阅读数:387 次  |  编程语言:PHP 

这个文件上传类可以自定上传文件大小与上传文件类型及文件保存地址,在使用过程中有一个问题就是如果是中文文件名进行上传就会出现乱码,所以大家解决办法就是把页面保存成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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例