PHP核心编程——文件上传

文件上传

目录

文件上传

原理

表单写法

$_FILES变量详解

移动临时文件到目标位置

多文件上传

多文件上传的$_FILES变量的数据结构形式

对多文件信息的遍历读取和处理

文件上传后续问题


原理

文件上传:文件从用户本地电脑通过传输方式(web表单)保存到服务器所在电脑指定的目录下。

 

1、增加文件上传的表单:浏览器请求一个服务器的HTML脚本(包含文件上传表单)

2、用户从本地选择一个文件(点击上传框(按钮))

3、用户点击上传按钮:文件会通过互联网传输到服务器上,

4、服务器操作系统会将文件保存到临时目录:是以临时文件格式保存(Windows下tmp)

5、服务器脚本开始工作:判断文件有效

6、服务器脚本将有效文件从临时目录移动到指定目录下(完成)

 

 

 

表单写法

1)method属性:文件上传表单提交方式必须为POST

2)entype属性:form表单属性,主要是规范表单数据的编码方式。

 

3)上传表单:file表单

 

 

 

$_FILES变量详解

在PHP中,有一个预定义变量$_FILES是专门用来存储用户上传的文件的。

 

 

测试:如果没有enctype属性,上传文件会是什么样子?

 

 

1)name:文件在用户(浏览器端)电脑上实际存在的名字(实际用来保留后缀)

2)tmp_name:文件上传到服务器后操作系统保存的临时路径(实际用来给PHP后期使用)

3)type:MIME类型(多功能互联网邮件扩展),是用来在计算机中客户端识别文件类型(确定软件)

4)error:文件上传的代号,用来告知应用软件(PHP)文件接收过程中出现了什么问题(PHP后期根据代码进行文件判断)

 

5)size:文件大小(后期PHP根据实际需求来确定是否该保留)

移动临时文件到目标位置

文件上传之后会保存到$_FILES,那么访问文件信息的形式就是$_FILES[‘表单name属性值’][‘元素信息’]

 

1)判断是否为上传文件:is_uploaded_file()

2)移动文件:move_uploaded_file(),也返回布尔值。如果移动成功,文件就被保存到指定目录下。

 

出现问题:文件权限。

 

修改c:\windows\temp的访问权限,赋予IUSR_用户可写

 

 

多文件上传

当商品需要上传多个图片进行展示的时候:那么需要使用多文件上传

       针对一个内容但是不同文件说明:同名表单

 

当商品需要进行多个维度图片说明的时候:需要使用多个文件上传

       针对是不同内容所以表单名字不一样:批量解决问题

 

多文件上传的$_FILES变量的数据结构形式

 

批量上传:

1、同名表单,将表单名字形成一个数组,而且同时将文件对应的五个要素:name,tmp_name, size ,type, error都形成对应的数量的数组,每个文件上传对应数组元素的下标都是一样的:name[0]和type[0]是属于同一个文件

 

2、不同名表单,每个文件都回形成一个属于自己独立的5个元素的数组

 

对多文件信息的遍历读取和处理

 

1、不同名多文件上传处理方式:按照表单名字从$_FILES中取出来就可以直接使用(明确知道表单中有多少个文件上传);如果不确定表单中有多少个文件上传,通过遍历$_FILES数组,挨个取出来实现文件上传。

 

2、同名多文件上传:想办法得到一个文件对应的五个元素数组。从$_FILES中把对应的name\tmp_name\size\error\type挨个取出来,然后存放到不同的数组中。

 

文件上传后续问题

实现上传功能代码的重复利用:封装文件上传函数

功能:上传文件

条件:条件判断

              需要上传的文件信息:对应的5个元素数组

              1、文件类型是否合适?外部指定MIME类型

              2、文件存储到什么位置?外部指定

              3、文件格式限制(文件后缀)?外部限定

              4、文件大小限制?外部指定

结果:实现文件上传

       1、成功:结果能够在以后看到:需要将文件的路径和文件名字返回

       2、失败:返回false,指定错误原因(引用参数)

 

 

1)封装除一个上传函数

 

2)判断文件是否有效

 

3)判断保存路径是否有效

 

4)判断文件本身上传的过程中是否有错误

 

5)文件类型的处理:通过MIME匹配即可

 

6)文件格式的处理:后缀名的问题

 

 

7)文件大小的处理

 

8)移动到指定目录

 

9)命名冲突的处理:上传同名文件?中文名字文件怎么办?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值