好得很程序员自学网

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

PHP多文件上传理解总结 - php上传下载

PHP多文件上传理解总结

上传文件HTML的输入标签FILE类型中的名称后要加[],作用是在HTML中向PHP建立数组,比如名称为pictures,多文件引用名称则为pictures[],实例代码如下:

< form   action =]upload.php]  method =]post]  enctype =]multipart/form-data] >   < p >   < input   type =]file]  name =]pictures[]]  /> < br   />   < input   type =]file]  name =]pictures[]]  /> < br   />   < input   type =]file]  name =]pictures[]]  /> < br   />   < input   type =]submit]  value =]上传]  />   </ p >   </ form >  

手册中实例,选择文件后点击上传,代码如下:

<?php print_r($_FILES); ?>

查看源文件,代码如下:

Array  (  [pictures] => Array  (  [name] => Array  (  [0] => file1.txt  [1] => file2.txt  [2] => file3.txt  )  [type] => Array  (  [0] => application/octet-stream  [1] => application/octet-stream  [2] => application/octet-stream  )  [tmp_name] => Array  (  [0] => D:EasyPHP\tmpphp47.tmp  [1] => D:EasyPHP\tmpphp48.tmp  [2] => D:EasyPHP\tmpphp49.tmp  )  [error] => Array  (  [0] => 0  [1] => 0  [2] => 0  )  [size] => Array  (  [0] => 94289  [1] => 65536  [2] => 102400  )  )  ) 

假设名为 /file1.txt和 /file2.txt 的文件被提交,则 $_FILES['pictures']['name'][0] 的值将是 file1.txt,而 $_FILES['pictures']['name'][1] 的值将是 file2.txt。类似的,$_FILES['file2.txt']['size'][0] 将包含文件 file1.txt 的大小,有了上面信息了我们要实现多文件上传就简单了,代码如下:

<?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 ( '上传目录创建失败!' );   }  //开源代码phpfensi.com   }    public   function  getupload() {   return   empty empty ( $this ->up_ret) ? false :  $this ->up_ret;   }    function  __destruct() {}   }   ?> 

在上面我们会看到一个for ($i = 0; $i < $up_cnt; $i ++),这个是遍历我们上面讲的一个个实例了.

查看更多关于PHP多文件上传理解总结 - php上传下载的详细内容...

  阅读:71次