好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

一个完美php文件上传类使用实例 - php上传下载

一个完美php文件上传类使用实例

这个文件上传类可以自定上传文件大小与上传文件类型及文件保存地址,使用起来也大兴非常的方法,有一个文就是如果是中文文件名是上传会是乱码,所以大家解决办法就是把页面保存成uft8即可解决.

因为写毕设论文写累了所以就发表一篇关于上传文件类的东东吧,这个类也是自己写的,不知道对大家有没有用,如果觉得可以就拿去用吧,不过在编码上面还是没做好,自己是在utf8的页面将数据进行提交的,所以生成的文件如果保持原来的中文名字的话在文件夹中看到就是乱码的名字,如果不想出现乱码的话需要进行一下编码的转换,代码如下:

<?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 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 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 empty ( $this ->allowext) || in_array( $this ->get_fileext(),  explode ( "|" , $this ->allowext)))  return  false;           return  true;      }             function  chk_size(){           if ( empty 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 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(); 

这里上传文件的操作也是[上传文件就这么简单!],当然那个$_FILES['upload_file']是对应表单中的file类型的控件的名字,而需不需要在上传后输出提示就看你自己啦,关于参数在代码那里面有详细说明,不过这里也是放出来吧.

ready方法的参数说明:

第一个参数$dir 为上传文件存放的路径

第二个参数为$_FILES 为你那个上传文件变量

第三个参数允许文件大小 单位为MB

第四个参数允许的文件类型 格式为jpg|png|gif

第五个参数是否需要生成新的文件名

第六个参数为返回的提示格式 0为直接提示上传正确 1则返回一个数组array('filename' => 上传的文件名字,'filesize' => 文件大小,'tip' => 成功上传);

查看更多关于一个完美php文件上传类使用实例 - php上传下载的详细内容...

  阅读:65次