ホームページ  >  記事  >  php教程  >  php 多文件上传

php 多文件上传

PHP中文网
PHP中文网オリジナル
2016-05-25 16:58:091080ブラウズ

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

// 多文件上传
function multifile_upload()
{
 
//1.获取要上传文件的信息
$up_info=$_FILES['pic'];
$ob_path="images_c";
$typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型
 
    for($i=0;$i<count($up_info[&#39;name&#39;]);$i++)
    { //foreach 循环处理多个文件上传
        //2.判断文件是否上传错误
        if($up_info[&#39;error&#39;][$i]>0){
 
            switch($up_info[&#39;error&#39;][$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[&#39;type&#39;][$i],$typelist)){
 
            continue(&#39;文件类型错误!&#39;.$up_info[&#39;type&#39;][$i]);
 
        }
 
        //4.上传文件的大小过滤
 
        if($up_info[&#39;size&#39;][$i]>1000000){
 
            continue(&#39;文件大小超过1000000&#39;);
 
        }
 
        //5.上传文件名处理
 
        $exten_name=pathinfo($up_info[&#39;name&#39;][$i],PATHINFO_EXTENSION);
 
        do{
 
            $main_name=date(&#39;YmHis&#39;.&#39;--&#39;.rand(100,99999));
 
            $new_name=$main_name.&#39;.&#39;.$exten_name;
 
        }while(file_exists($to_path.&#39;/&#39;.$new_name));
 
        //6.判断是否是上传的文件,并执行上传
 
        if(is_uploaded_file($up_info[&#39;tmp_name&#39;][$i])){
 
            if(move_uploaded_file($up_info[&#39;tmp_name&#39;][$i],$ob_path.&#39;/&#39;.$new_name)){
 
                 // echo &#39;文件上传成功!&#39;;
                $img[]=$new_name;
 
            }else{
 
                echo &#39;上传文件移动失败!&#39;;
 
            }
 
        }else{
 
            echo &#39;文件不是上传的文件&#39;;
 
        }
 
    } //for循环的括号
    return $img;
}
 
 
<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>
 
// 方法一:当多文件上传表单中多个上传文件的name属性为“pic[]”形式时,也即表单为这种形式。

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

//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][&#39;error&#39;]>0){
 
        switch($up_info[&#39;error&#39;][$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][&#39;type&#39;],$typelist)){
 
        continue(&#39;文件类型错误!&#39;.$up_info[$k_name][&#39;type&#39;]);
 
    }
 
    //4.上传文件的大小过滤
 
    if($up_info[$k_name][&#39;size&#39;]>100000){
 
        echo &#39;文件大小超过**&#39;;
 
        continue;
 
    }
 
    //5.上传文件名处理
 
    $exten_name=pathinfo($up_info[$k_name][&#39;name&#39;],PATHINFO_EXTENSION);
 
    do{
 
        $main_name=date(&#39;YmHis&#39;.&#39;--&#39;.rand(100,999));
 
        $new_name=$main_name.&#39;.&#39;.$exten_name;
 
    }while(file_exists($to_path.&#39;/&#39;.$new_name));
 
    //6.判断是否是上传的文件,并执行上传
66
  
67
    if(is_uploaded_file($up_info[$k_name][&#39;tmp_name&#39;])){
 
        if(move_uploaded_file($up_info[$k_name][&#39;tmp_name&#39;],$ob_path.&#39;/&#39;.$new_name)){
 
            echo &#39;文件上传成功!&#39;;
 
        }else{
 
            echo &#39;上传文件移动失败!&#39;;
 
        }
 
    }else{
 
        echo &#39;文件不是上传的文件&#39;;
 
    }
 
} //for循环的括号
 
 
 
<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>
 
// 方法二:当多文件上传表单中多个上传文件的name属性为“pic,text,doc,pdf”形式时

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

/*
002
*单文件上传函数
003
*@param array $up_info 记录上传文件信息的超全局数组
004
*@param string $to_path 上传文件的目标路径
005
*@param array $typlist 允许的文件类型
006
*@param int $file_size允许的文件大小
007
*@return string 上传失败,返回失败的原因,
008
* http://yige.org/php/
009
* 成功返回包括文件名的路径。
010
*/
 
function upload_fun($up_info,$to_path,$typelist=array(),$file_size=2000000){
 
  
 
    //1.判断文件上传是否错误
 
  
 
    if($up_file[&#39;error&#39;]>0){
 
        switch($up_info[&#39;error&#39;]){
 
            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[&#39;type&#39;],$typelist)){
 
  
 
            $err_info=&#39;文件类型不合法!&#39;.$up_info[&#39;type&#39;];
 
            return $err_info;
 
            die();
 
        }
 
    }
 
    //4.判断上传文件大小是否超出允许值
 
    if($up_info[&#39;size&#39;]>$file_size){
 
        return $err_info=&#39;文件大小超过&#39;.$file_size;
 
        die();
 
    }
 
    //5.上传文件重命名
 
    $exten_name=pathinfo($up_info[&#39;name&#39;],PATHINFO_EXTENSION);
 
    do{
 
        $main_name=date(&#39;YmHis&#39;.&#39;--&#39;.rand(100,999));
 
        $new_name=$main_name.&#39;.&#39;.$exten_name;
 
    }while(file_exists($to_path.&#39;/&#39;.$new_name));
 
    //6.判断是否是上传的文件,并移动文件
 
    if(is_uploaded_file($up_info[&#39;tmp_name&#39;])){
 
        if(move_uploaded_file($up_info[&#39;tmp_name&#39;],$to_path.&#39;/&#39;.$new_name)){
 
            $err_info=$to_path.&#39;/&#39;.$new_name;
 
            return $err_info;
            die();
 
        }else{
 
 
            return $err_info=&#39;上传文件移动失败!&#39;;
 
            die();
 
        }
 
    }else{
 
        return $err_info=&#39;这个文件不是上传文件!&#39;;
 
        die();
 
    }
 
}
 
//函数使用方法如下
 
$multi_info=$_FILES; //接收$_FILES的全部上传信息
 
$to_path=&#39;system&#39;; //上传文件的目标路径
 
foreach($multi_info as $name=>$up_info){ //foreach 遍历$multi_info
 
    $err_info=upload_fun($up_info,$to_path); //调用单文件上传函数
 
    p($err_info); //输出返回信息;
 
}
 
 
<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>
 
// 方法三:先定义单个文件上传的函数,再循环调用这个函数,每次传入一个文件的上传信息,也可以到达多文件上传的目的,而且这种方式,更容易理解。
------------------------------------------------------------------
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。