好得很程序员自学网

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

php 多文件上传的处理方法 - php上传下载

php 多文件上传的处理方法

关于多文件上传我们讲过很多了,下面是一个简单的普通form多文件上传类了,需要的朋友可以下载使用一下,代码如下:

<?php               class  upload {                public   $up_ext = array (),  $up_max =5210,  $up_dir ;                private   $up_name ,  $up_rename =true,  $up_num =0,  $up_files = array (),  $up_ret = array ();                  function  __construct( $name ,  $ext = array (),  $rename =true) {                    if  (! empty empty ( $name )) {                        $this ->up_name =  $name ;                       ! empty empty ( $ext ) &&  $this ->up_ext =  $ext ;                        $this ->up_rename =  $rename ;                        $this ->up_dir = website_dirroot.                                        $globals [ 'cfg_upload_path' ];                                        $this ->initupload();                   }  else  {                        exit ( 'upload文件域名称为空,初始化失败!' );                   }               }                  private   function  initupload() {                    if  ( is_array ( $_files [ $this ->up_name])) {                        $up_arr  =  count ( $_files [ $this ->up_name]);                        $up_all  =  count ( $_files [ $this ->up_name], 1);                        $up_cnt  = ( $up_all  -  $up_arr ) /  $up_arr ;                        for  ( $i  = 0;  $i  <  $up_cnt ;  $i  ++) {                             if  ( $_files [ $this ->up_name][ 'error' ][ $i ] != 4) {                                 $this ->up_files[] =  array (                                     'tmp_name'  =>  $_files [ $this ->up_name][ 'tmp_name' ][ $i ],                                     'name'  =>  $_files [ $this ->up_name][ 'name' ][ $i ],                                     'type'  =>  $_files [ $this ->up_name][ 'type' ][ $i ],                                     'size'  =>  $_files [ $this ->up_name][ 'size' ][ $i ],                                     'error'  =>  $_files [ $this ->up_name][ 'error' ][ $i ]                                );                            }                       }                        $this ->up_num =  count ( $this ->up_files);                   }  else  {                        if  (isset( $_files [ $this ->up_name])) {                            $this ->up_files =  array (                                 'tmp_name'  =>  $_files [ $this ->up_name][ 'tmp_name' ],                                 'name'  =>  $_files [ $this ->up_name][ 'name' ],                                 'type'  =>  $_files [ $this ->up_name][ 'type' ],                                 'size'  =>  $_files [ $this ->up_name][ 'size' ],                                 'error'  =>  $_files [ $this ->up_name][ 'error' ]                           );                            $this ->up_num = 1;                       }  else  {                            exit ( '没找找到需要upload的文件!' );                       }                   }                      $this ->chkupload();               }                  private   function  chkupload() {                    if  ( empty empty ( $this ->up_ext)) {                        $up_mime  =  array ( 'image/wbmp' ,  'image/bmp' ,  'image/gif' ,  'image/pjpeg' ,  'image/x-png' );                        foreach  ( $this ->up_files  as   $up_file ) {                            $up_allw  = false;                            foreach  ( $up_mime   as   $mime ) {                                if  ( $up_file [ 'type' ] ==  $mime ) {                                    $up_allw  = true;  break ;                               }                           }                            ! $up_allw  &&  exit ( '不允许上传' . $up_file [ 'type' ]. '格式的文件!' );                              if  ( $up_file [ 'size' ] / 1024 >  $this ->up_max) {                                exit ( '不允许上传大于 ' . $this ->up_max. 'k 的文件!' );                           }                       }                    }  else  {                        foreach  ( $this ->up_files  as   $up_file ) {                            $up_ext  =  end ( explode ( '.' ,  $up_file [ 'name' ]));                              $up_allw  = false;                            foreach  ( $this ->up_ext  as   $ext ) {                                                             if  ( $up_ext  ==  $ext ) {                                    $up_allw  = true;  break ;                               }                           }                           ! $up_allw  &&  exit ( '不允许上传.' . $up_ext . '格式的文件!' );                              if  ( $up_file [ 'size' ] / 1024 >  $this ->up_max) {                                exit ( '不允许上传大于 ' . $this ->up_max. 'k 的文件!' );                           }                       }                   }                      $this ->uploading();               }                  private   function  uploading() {                    if  (io::dircreate( $this ->up_dir)) {                        if  ( chmod ( $this ->up_dir, 0777)) {                            if  (! empty empty ( $this ->up_files)) {                                foreach  ( $this ->up_files  as   $up_file ) {                                    if  ( is_uploaded_file ( $up_file [ 'tmp_name' ])) {                                        $file_name  =  $up_file [ 'name' ];                                        if  ( $this ->up_rename) {                                            $file_ext  =  end ( explode ( '.' ,  $file_name ));                                            $file_rnd  =  substr (md5(uniqid()), mt_rand(0, 26), 6);                                             $file_name  =  date ( 'ymdhis' ). '_' . $file_rnd . '.' . $file_ext ;                                       }                                         $file_name  =  $this ->up_dir. '/' . $file_name ;                                          if  (move_uploaded_file( $up_file [ 'tmp_name' ],  $file_name )) {                                            $this ->up_ret[] =  str_replace (website_dirroot,  '' ,  $file_name );                                       }  else  {                                            exit ( '文件上传失败!' );                                       }                                   }                               }                           }                       }  else  {                            exit ( '未开启写入权限!' );                       }                   }  else  {                        exit ( '上传目录创建失败!' );                   }               }                  public   function  getupload() {                    return   empty empty ( $this ->up_ret) ? false :  $this ->up_ret;               }                  function  __destruct() {}         }  ?> 

大量文件或大体积文件的情况可以考虑调用组件解决(如前文提到的swfupload组件),然而有些情况只需要传递几个文件,而且文件体积并不太大,这种情况下使用组件则有点牛刀杀鸡的感觉,通过html自带的<input type="file">表单就可以实现需要的功能,关键在于后台接收程序的处理.

php处理上传做的很方便,上传文件的信息通过服务器自动处理到$_files数组中,开发者只需要使用的内置处理函数简单操作就可以啦。asp教程开发者则没有这么幸运,官方并没有提供直接的处理方法,需要开发者自己设计,这时就需要开发者了解iis对enctype="multipart/form-data"表单的处理方式,iis把enctype="multipart/form-data"表单提交的数据存储成二进制数据,以二进制格式返回给开发者,开发者则需要通过lenb、midb的字节处理函数来分析获取的上传内容,客户端发送的具体表单数据格式,可以了解下http rfc1867协议传输格式方面的知识.

查看更多关于php 多文件上传的处理方法 - php上传下载的详细内容...

  阅读:66次