zoukankan      html  css  js  c++  java
  • PHP三种方法实现多文件上传

    今天一个网介绍三种多文件上传的方法,前两种都是直接遍历三维超全局数组$_FILES,最后一种是先定义一个单文件上传函数,再循环调用该函数,完成多文件的上传。

    方法一:当多文件上传表单中多个上传文件的name属性为“pic[]”形式时,也即表单为这种形式。

    HTML代码:

    <form action="" method="post"enctype="multipart/form-data">
    <input type="hidden"name="MAX_FILE_SIZE" value="">
    <input type="file" name="pic[]" /><br><br>
    <input type="file" name="pic[]" /><br><br>
    <input type="file" name="pic[]" /><br><br>
    <input type="file" name="pic[]" /><br><br>
    <input type="submit" value="upload"/>
    
    </form>
         
    PHP代码:
    
    <?php
    
    //1.获取要上传文件的信息
    $up_info=$_FILES['pic'];
    $ob_path="../system";
    
    $typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型
    for($i=0;$i<count($up_info['name']);$i++){ //foreach 循环处理多个文件上传
        //2.判断文件是否上传错误
        if($up_info['error'][$i]>0){
            switch($up_info['error'][$i]){
                case 1:
                    $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制值";
                    break;
                case 2:
                    $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
                    break;
                case 3:
                    $err_info="文件只有部分被上传";
                    break;
                case 4:
                    $err_info="没有文件被上传";
                    break;
                case 6:
                    $err_info="找不到临时文件夹";
                    break;
                case 7:
                    $err_info="文件写入失败";
                    break;
                default:
                    $err_info="未知的上传错误";
                    break;
            }
    
            continue($err_info);
        }
        //3.判断文件上传的类型是否合法
    
        if(!in_array($up_info['type'][$i],$typelist)){
            continue('文件类型错误!'.$up_info['type'][$i]);
        }
        //4.上传文件的大小过滤
        if($up_info['size'][$i]>1000000){
            continue('文件大小超过1000000');
        }
    
        //5.上传文件名处理
        $exten_name=pathinfo($up_info['name'][$i],PATHINFO_EXTENSION);
        do{
            $main_name=date('YmHis'.'--'.rand(100,999));
            $new_name=$main_name.'.'.$exten_name;
        }while(file_exists($to_path.'/'.$new_name));
        //6.判断是否是上传的文件,并执行上传
        if(is_uploaded_file($up_info['tmp_name'][$i])){
            if(move_uploaded_file($up_info['tmp_name'][$i],$ob_path.'/'.$new_name)){
                echo '文件上传成功!';
            }else{
                echo '上传文件移动失败!';
            }
        }else{
            echo '文件不是上传的文件';
        }
    } //for循环的括号
    
               

    方法二:当多文件上传表单中多个上传文件的name属性为“pic,text,doc,pdf”形式时

    也即表单为这种形式:

    <form action="" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="">
    <input type="file" name="pic" /><br><br>
    <input type="file" name="text" /><br><br>
    <input type="file" name="doc" /><br><br>
    <input type="file" name="pdf" /><br><br>
    <input type="submit" value="upload"/>
    </form>
    
    //1.获取要上传文件的信息
    $up_info=$_FILES;
    
    $ob_path="..system";
    
    $typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型
    foreach($up_info as $k_name=>$value){ //用foreach循环 处理多个文件的上传
        //2.判断文件是否上传错误
    
        if($up_info[$k_name]['error']>0){
            switch($up_info['error'][$i]){
                case 1:
                    $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
                    break;
                case 2:
                    $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
                    break;
                case 3:
                    $err_info="文件只有部分被上传";
                    break;
                case 4:
                    $err_info="没有文件被上传";
                    break;
                case 6:
                    $err_info="找不到临时文件夹";
                    break;
                case 7:
                    $err_info="文件写入失败";
                    break;
                default:
                    $err_info="未知的上传错误";
                    break;
            }
            continue($err_info);
    
        }
        //3.判断文件上传的类型是否合法
    
        if(!in_array($up_info[$k_name]['type'],$typelist)){
            continue('文件类型错误!'.$up_info[$k_name]['type']);
        }
    
        //4.上传文件的大小过滤
    
        if($up_info[$k_name]['size']>100000){
            echo '文件大小超过**';
            continue;
    
        }
    
        //5.上传文件名处理
        $exten_name=pathinfo($up_info[$k_name]['name'],PATHINFO_EXTENSION);
        do{
            $main_name=date('YmHis'.'--'.rand(100,999));
    
            $new_name=$main_name.'.'.$exten_name;
        }while(file_exists($to_path.'/'.$new_name));
        //6.判断是否是上传的文件,并执行上传
    
        if(is_uploaded_file($up_info[$k_name]['tmp_name'])){
            if(move_uploaded_file($up_info[$k_name]['tmp_name'],$ob_path.'/'.$new_name)){
                echo '文件上传成功!';
            }else{
                echo '上传文件移动失败!';
            }
        }else{
            echo '文件不是上传的文件';
    
        }
    } //for循环的括号


     
     

    方法三:先定义单个文件上传的函数,再循环调用这个函数,每次传入一个文件的上传信息,也可以到达多文件上传的目的,而且这种方式,更容易理解。

    <form action="" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="">
    <input type="file" name="pic1" ><br>
    <input type="file" name="pic2"><br>
    <input type="file" name="pic3"><br>
    <input type="submit" value="upload">
    
    </form>
    /*
    *单文件上传函数
    *@param array $up_info 记录上传文件信息的超全局数组
    *@param string $to_path 上传文件的目标路径
    *@param array $typlist 允许的文件类型
    *@param int $file_size允许的文件大小
    *@return string 上传失败,返回失败的原因
    * http://yige.org/php/
    * 成功返回包括文件名的路径。
    */
    function upload_fun($up_info,$to_path,$typelist=array(),$file_size=2000000){
        //1.判断文件上传是否错误
    
        if($up_file['error']>0){
            switch($up_info['error']){
                case 1:
                    $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
                    break;
                case 2:
                    $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
                    break;
                case 3:
                    $err_info="文件只有部分被上传";
                    break;
                case 4:
                    $err_info="没有文件被上传";
                    break;
                case 6:
                    $err_info="找不到临时文件夹";
                    break;
                case 7:
                    $err_info="文件写入失败";
                    break;
    
                default:
                    $err_info="未知的上传错误";
                    break;
            }
            return $err_info;
    
            die();
        }
        //2.判断上传文件类型是否合法
        if(count($typelist)>0){
            if(!in_array($up_info['type'],$typelist)){
                $err_info='文件类型不合法!'.$up_info['type'];
                return $err_info;
                die();
            }
        }
    
        //4.判断上传文件大小是否超出允许值
    
        if($up_info['size']>$file_size){
            return $err_info='文件大小超过'.$file_size;
    
            die();
    
        }
    
        //5.上传文件重命名
    
        $exten_name=pathinfo($up_info['name'],PATHINFO_EXTENSION);
    
        do{
            $main_name=date('YmHis'.'--'.rand(100,999));
            $new_name=$main_name.'.'.$exten_name;
    
        }while(file_exists($to_path.'/'.$new_name));
    
        //6.判断是否是上传的文件,并移动文件
    
        if(is_uploaded_file($up_info['tmp_name'])){
            if(move_uploaded_file($up_info['tmp_name'],$to_path.'/'.$new_name)){
                $err_info=$to_path.'/'.$new_name;
                return $err_info;
                die();
            }else{
                return $err_info='上传文件移动失败!';
    
                die();
    
            }
        }else{
            return $err_info='这个文件不是上传文件!';
            die();
    
        }
    
    }
    
    //函数使用方法如下
    $multi_info=$_FILES; //接收$_FILES的全部上传信息
    $to_path='system'; //上传文件的目标路径
    
    
    foreach($multi_info as $name=>$up_info){ //foreach 遍历$multi_info
    
        $err_info=upload_fun($up_info,$to_path); //调用单文件上传函数
        p($err_info); //输出返回信息;
    
    
    }
    
     
    
          

    本文转自  http://yige.org/p/492

  • 相关阅读:
    FastWeb2011互联网工具发布
    本站启用新型试用模式
    TDiode单相及三相整流电路辅助设计器发布
    DCOp直流多级电路计算机辅助设计软件下载
    OpDesign2阻容耦合放大电路辅助设计软件下载
    共享软件的思考
    IpAdr网络地址计算器2011发布
    使用JavaScript动态添加复选框Checkbox
    JQuery操作checkbox、radio
    如果Oracle中的字段和数据库的系统字段重名,怎么配置NHibernate的映射实体文件
  • 原文地址:https://www.cnblogs.com/lihaiyan/p/4274442.html
Copyright © 2011-2022 走看看