0

0

总结三种php多文件上传的方法

伊谢尔伦

伊谢尔伦

发布时间:2017-06-24 14:55:23

|

7491人浏览过

|

来源于php中文网

原创

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

Felvin
Felvin

AI无代码市场,只需一个提示快速构建应用程序

下载
1.当多文件上传表单中多个上传文件的name属性为“pic[]”形式时, 
  也即表单为这种形式: 
<!--lang: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> 
可用foreach 循环 上传多个文件: 
//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循环的括号 



2.当多文件上传表单中多个上传文件的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> 




也可用foreach 循环 上传多个文件: 

//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循环的括号 



//3.上面的循环是嵌入到文件上传的代码中的,可能有点不好理解,这儿提供第三种法, 
//先定义单个文件上传的函数,再循环调用这个函数,每次传入一个文件的上传信息, 
//也可以到达多文件上传的目的,而且这种方式,更容易理解。 

//上传的表单的形式和第二种方法中的相同,即: 


    <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 上传失败,返回失败的原因, 
 * 
 *                成功返回包括文件名的路径。 
 */


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);                              //输出返回信息; 

}

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
bootstrap安装教程
bootstrap安装教程

本专题整合了bootstrap安装相关教程,阅读专题下面的文章了解更多详细操作教程。

3

2026.03.18

bootstrap框架介绍
bootstrap框架介绍

本专题整合了bootstrap框架相关介绍,阅读专题下面的文章了解更多详细内容。

4

2026.03.18

vscode 格式化
vscode 格式化

本专题整合了vscode格式化相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.03.18

vscode设置中文教程
vscode设置中文教程

本专题整合了vscode设置中文相关内容,阅读专题下面的文章了解更多详细教程。

0

2026.03.18

vscode更新教程合集
vscode更新教程合集

本专题整合了vscode更新相关内容,阅读专题下面的文章了解更多详细教程。

3

2026.03.18

Gemini网页版零基础入门:5分钟上手Gemini聊天指南
Gemini网页版零基础入门:5分钟上手Gemini聊天指南

本专题专为零基础用户打造,5分钟快速掌握Gemini网页版核心用法。从账号登录到界面布局,详解如何发起对话、优化提示词及利用多模态功能。通过实战案例,教你高效获取信息、创作内容与分析数据。无论学习还是工作,轻松开启AI辅助新时代,让Gemini成为你的得力智能助手。

9

2026.03.18

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

8

2026.03.18

Java Spring Security权限控制与认证机制实战
Java Spring Security权限控制与认证机制实战

本专题围绕 Java 后端安全体系建设展开,重点讲解 Spring Security 在权限控制与认证机制中的应用实践。内容涵盖用户认证流程、权限模型设计、JWT 鉴权方案、OAuth2 集成以及接口安全防护策略。通过实际项目案例,帮助开发者构建安全可靠的后端认证体系,提升系统安全性与可扩展能力。

26

2026.03.18

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

176

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.4万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号