今天一个网介绍三种多文件上传的方法,前两种都是直接遍历三维超全局数组$_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

版权声明:本文为lihaiyan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lihaiyan/p/4274442.html