PHP实现多文件上传

PHP文件上传流程

  1. 单击提交按钮,浏览器用户将包含上传文件的表单数据提交给PHP处理程序
  2. Web服务器和PHP预处理器首先判断表单数据的大小是否超过php.ini配置文件中的post_max_size选项设置的上限值。
    若超过,PHP处理程序将无法得到任何表单数据,此时不仅上传文件失败,而且表单控件中填写的数据也会提交失败,也就是说:PHP处理程序预定义变量$_GET、$_POST、$_FILES将为空数组。
    若没有超过,文件上传进入第3步检验。
  3. 检验表单中的文件大小是否超过表单隐藏域MAX_FILE_SIZE设置的上限值。
    若超过,PHP预处理器返回状态码2,文件上传失败。
    若没有超过,文件上传进入第4步检验。
    (当有多个文件进行上传时,某个文件上传框导致的文件上传失败,不会影响其他文件上传框的上传结果)
  4. 检验表单中的文件是否超过php.ini配置文件中upload_max_filesize选项设置的上限值。
    若超过,PHP预处理器返回状态码1,文件上传失败。
    若没有超过,文件上传进入第5步检验。
  5. PHP实现上传文件需要在php.ini配置文件upload_tmp_dir选项定义的目录中创建一个与上传文件一一对应的临时文件(默认拓展名为tmp),上传成功后,临时文件立即消失,此时PHP预处理器的返回状态码0。
    但是有时由于某些原因(如max_execution_time选项设置过小或者网速慢等原因),上传部分文件后不再继续上传剩余文件,导致文件上传失败,此时PHP预处理器返回状态码3
    若通过,文件上传进入第6步检验。
  6. 实现文件上传的关键一步在于在临时文件消失前,需要将临时文件保存到Web服务器或文件服务器。PHP提供的两个函数:is_uploaded_file() 函数和 move_uploaded_file() 函数,可以帮助完成这一步的工作

多个文件上传要注意的就是相同的name保存的文件内容是按照下面的形式放在数组中的。是五个数组,按照文件的五个参数分别存放的,并非三个数组。所以如果直接使用count($_FILES[’$myPicture’]),答案为5。

array (size=5)'name' => array (size=3)0 => string '1.txt' (length=5)1 => string '2.txt' (length=5)2 => string '3.txt' (length=5)'type' => array (size=3)0 => string 'text/plain' (length=10)1 => string 'text/plain' (length=10)2 => string 'text/plain' (length=10)'tmp_name' => array (size=3)0 => string 'D:\wamp64\tmp\phpC5E8.tmp' (length=25)1 => string 'D:\wamp64\tmp\phpC5E9.tmp' (length=25)2 => string 'D:\wamp64\tmp\phpC5EA.tmp' (length=25)'error' => array (size=3)0 => int 01 => int 02 => int 0'size' => array (size=3)0 => int 01 => int 02 => int 0

index.php文件

<form action="fileSystem.php" method="post" enctype="multipart/form-data"><input type="hidden" name="MAX_FILE_SIZE" value="100000" /><input type="file" name="myPicture[]" size= "25" maxlength="100"><br><input type="file" name="myPicture[]" size= "25" maxlength="100"><br><input type="file" name="myPicture[]" size= "25" maxlength="100"><br><input type="submit" value="提交">
</form>

fileSystem文件

<?phpif (empty($_POST)) {exit("提交的表单数据超过post_max_size的配置");}$arr = $_FILES['myPicture'];$file =array();for ($i=0; $i < count($arr['name']); $i++) { $file[$i]['name'] = $arr['name'][$i];$file[$i]['type'] = $arr['type'][$i];$file[$i]['tmp_name'] = $arr['tmp_name'][$i];$file[$i]['error'] = $arr['error'][$i];$file[$i]['size'] = $arr['size'][$i];}for ($i=0; $i < count($file); $i++) { switch ($file[$i]['error']) {case 0:          $fileName = $file[$i]['name'];$fileTemp = $file[$i]['tmp_name'];$destination = "uploads/" . $file[$i]['name'];move_uploaded_file($fileTemp, $destination);echo "上传成功";break;case 1:echo "上传附件超过php.ini中的upload_max_filesize选项的限制";break;case 2:echo "上传附件的大小超过了form表单MAX_FILE_SIZE选项指定的值";break;case 3:echo "附件只有部分被上传";break;case 4:echo "没有选择上传附件";break;} }   
?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bzoj5324:[Jxoi2018]守卫

传送门 首先考虑定下一个端点&#xff0c;然后剩下的就可以递推了 一开始想的是定下左端点&#xff0c;然后预处理出位置最远能看到的位置&#xff0c;后来发现时间GG了 看题解发现定右端点优秀得多 记录下当前\(r\)最远能看到的位置\(p\)&#xff0c;能看到\([p,r]\)一共需要几…

蓝桥杯第八届省赛JAVA真题----分巧克力

标题&#xff1a; 分巧克力 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力&#xff0c;其中第i块是Hi x Wi的方格组成的长方形。 为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克…

蓝桥杯第八届省赛JAVA真题----油漆面积

标题&#xff1a;油漆面积 X星球的一批考古机器人正在一片废墟上考古。 该区域的地面坚硬如石、平整如镜。 管理人员为方便&#xff0c;建立了标准的直角坐标系。 每个机器人都各有特长、身怀绝技。它们感兴趣的内容也不相同。 经过各种测量&#xff0c;每个机器人都会报告…

练习2——顺序表

//实现顺序表基本功能&#xff0c;然两个顺序表相并 #include <iostream> #include <stdlib.h> using namespace std; typedef int T; class SeqList{T *data;int MaxSize;int last; public:SeqList(int sz);~SeqList(){delete [] data;}int Length() const {retur…

docker占满linux磁盘根目录的解决办法

一、磁盘根目录被占满 [testlocalhost docker]$ df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 50G 50G 0G 100% / devtmpfs 7.7G 0 7.7G 0% /dev tmpfs 7.8G 0 7.8G 0…

蓝桥杯第八届省赛JAVA真题----包子凑数

标题&#xff1a;包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼&#xff0c;其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼&#xff0c;可以认为是无限笼。 每当有顾客想买X个包子&#xff0c;卖包子的大叔就会迅速选出若干笼包子来&…

蓝桥杯第八届省赛JAVA真题----字母组串

标题&#xff1a;字母组串 由 A,B,C 这3个字母就可以组成许多串。 比如&#xff1a;”A”,”AB”,”ABC”,”ABA”,”AACBB” …. 现在&#xff0c;小明正在思考一个问题&#xff1a; 如果每个字母的个数有限定&#xff0c;能组成多少个已知长度的串呢&#xff1f; 他请好…

蓝桥杯第八届省赛JAVA真题----9数算式

标题&#xff1a;9数算式 观察如下的算式&#xff1a; 9213 x 85674 789314562 左边的乘数和被乘数正好用到了1~9的所有数字&#xff0c;每个1次。 而乘积恰好也是用到了1~9的所有数字&#xff0c;并且每个1次。 请你借助计算机的强大计算能力&#xff0c;找出满足如上要…

《剑指offer》第五十三题(数组中数值和下标相等的元素)

// 面试题53&#xff08;三&#xff09;&#xff1a;数组中数值和下标相等的元素 // 题目&#xff1a;假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实 // 现一个函数找出数组中任意一个数值等于其下标的元素。例如&#xff0c;在数组{-3, -1, // 1, 3, 5}中…

Mysql 外键创建失败原因

最近在学习PHP&#xff0c;在用mysql创建表的时候总是创建不出来&#xff0c;我用的是Navicat做的&#xff0c;虽然建不出来外键&#xff0c;但是会创建出来一个索引&#xff0c;后来才明白&#xff0c;一定要有了对应的索引才能创建外键。

shiro(1) 介绍

一、什么是shiro&#xff08;1&#xff09;属性&#xff1a;java框架&#xff08;2&#xff09;用途&#xff1a;身份验证、用户授权、加密、会话管理&#xff08;3&#xff09;优点&#xff1a;轻量、易用二、三大组件&#xff08;1&#xff09;subject&#xff1a;代表当前主…

PHP实现简单注册登录系统

目录结构如下&#xff0c;其中function文件夹下包含两个函数文件&#xff0c;uploads文件夹用于存放上传的文件。 注&#xff1a;博主使用的是php5&#xff0c;使用php7的小伙伴运行报错的话有一部分原因是新的语法造成的&#xff0c;修改成新语法就可以了 html页面 登录页面…

代码审计中的文件包含漏洞

0x00 背景 文件包含漏洞是php语言的一大特性。文件包含的意思是&#xff0c;服务器在执行PHP文件时&#xff0c;可以通过文件包含函数加载另一个文件中的PHP代码并执行&#xff0c;这会为开发者节省大量的时间。而文件包含漏洞的出现在于服务器没有对要包含的来源文件进行审查&…

蓝桥杯第九届省赛JAVA真题----螺旋折线

标题&#xff1a;螺旋折线 如图p1.pgn所示的螺旋折线经过平面上所有整点恰好一次。 对于整点(X, Y)&#xff0c;我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。 例如dis(0, 1)3, dis(-2, -1)9 给出整点坐标(X, Y)&#xff0c;你能计算出dis(X, Y)…

JAVA-WEB开发环境和搭建

JAVA Web开发环境与搭建 一、下载安装JDK 1.配置jdk开发环境 JAVA_HOME 2.path 二、下载安装eclipse javaEE版本 三、安装部署tomcat 3.1、安装&#xff1a; 直接解压到指定目录即可。&#xff08;注&#xff1a;目录不要太深&#xff1b;目录不要有中文或空格&#xff09; 3.2…

Vue入门 ---- 简易留言板

##简述 初学vue&#xff0c;比Angular要简单易学一点&#xff0c;基本就是html代码json。这是第一个小的例子&#xff0c;用到了vue的几个常用方法&#xff0c;其中v-for的$index稍微有点迷惑&#xff0c;也影响了完成的速度&#xff0c;网上说是vue2.0已经取消了这种用法&…

Factors of Factorial AtCoder - 2286 (N的阶乘的因子个数)(数论)

Problem Statement You are given an integer N. Find the number of the positive divisors of N!, modulo 10^97. Constraints 1≤N≤10^3Input The input is given from Standard Input in the following format: NOutput Print the number of the positive divisors of N!,…

VS Code编译Python

一、想要编译Python我们首先要安装python&#xff0c;进入官网下载python3&#xff08;不要下载python2.7&#xff0c;不就之后就不会再使用低版本的python了&#xff09; 二、配置环境变量 三、在VS Code中添加插件&#xff0c;记得添加完点击重新加载插件&#xff0c;或…

JAVA学习笔记_五JAVA开发中的WEB前端技术

css 字体属性: font-size font-style font-family font-weight font 设置字体font-family时&#xff0c;中文、英文字体设置时的顺序&#xff0c;英文在前中文在后&#xff1b; font-size&#xff1a;常用单位px&#xff0c;也用in、cm、mm、pt、pc&#xff0c;这几个简…

VS Code编译C/C++

C/C环境的配置要比python的复杂许多&#xff0c;好几个配置文件要写。 一、编译C/C的环境一般都是集成在我们的编辑器中的&#xff0c;如果电脑上有codeblock和dev c的读者可以去安装路径下找找MinGW文件夹&#xff0c;可以不用重复下载。而没有的读者则需要下载MinGW 二、配置…