PHP基础之文件的上传与下载

文件上传

概述

1、客户端文件通过HTTP协议复制到远程服务器
2、客户端的一切文件均可上传

原理

前端通过html表单控件将文件通过http协议复制到服务器临时目录中,服务端接收并将文件从临时目录转移到指定目录

上传准备

前端

1、表单设置属性enctype=“multipart/form-data”,表示不对数据进行编码
2、前端限制提交文件大小,value为文件字节大小

<input type="hidden" name="MAX_FILE_SIZE" value="10240" />

3、选择文件表单控件

<input type="file" name="name" />

后端

1、 配置php.ini

  • file_upload 【Boolean,是否开启HTTP文件上传,默认为true开启】
  • upload_tmp_dir 【指定文件上传的临时目录
  • upload_max_filesize 【int,上传文件的最大大小,单位bytes,只包含表单文件
  • max_file_uploads 【int,一个请求允许上传的最大文件数】
  • max_execution_time 【int,脚本在解析器终止之前运行的最长时间】
  • max_input_time 【int,脚本解析输入数据的最长时间(秒)】
  • post_max_size 【char/int,运行post数据的最大值,包含表单文件和表单数据
  • memory_limit 【int,运行脚本分配的最大内存量(字节单位)】

几个配置的大小关系如下:
系统物理内存大小 > memory_limit > post_max_size >upload_max_filesize

2.、通过超全局变量$_FILES获取上传文件信息并进行文件操作

$_FILES是HTTP POST方式上传到当前脚本的项目数组

包含键名

属性作用
name原始文件名
type文件的MIME类型
tmp_name上传到服务器的临时文件名称
error上传后发生的错误类型
size文件的实际大小(size)

MIME类型
是一种用来表示文档性质和格式的标准化,浏览器通过使用MIME类型来确定如何处理文档(注意:不是文件扩展名

error类型

标识说明
0UPLOAD_ERR_OK(没有错误,上传成功)
1UPLOAD_ERR_INT_SIZE(文件大小超出配置upload_max_filesize
2UPLOAD_ERR_FORM_SIZE(文件大小超出MAX_FILE_SIZE)
3UPLOAD_ERR_PARTIAL(部分文件被上传,如大文件上传突然断网的情况)
4UPLOAD_ERR_NO_FILE(没有文件被上传)
6UPLOAD_ERR_NO_TMP_DIR(找不到临时目录。临时目录顺序为:先找配置文件临时目录、再找系统临时目录,两个都没有才报错)
7UPLOAD_ERR_CANT_WRITE(写入磁盘失败,一般是对应目录无写权限,特别注意Linux系统要给对应目录指定权限)
8UPLOAD_ERR_EXTENSION(一个php扩展阻止了文件上传)

上传的实现

相关函数

函数名作用
move_uploaded_file()将文件移动到新位置
is_uploaded_file()判断文件是否是HTTP POST上传
rename()重命名文件或目录

实现步骤

1、接收$_FILES参数
2、处理上传可能发生的错误
3、限制文件的MIME类型
4、限制文件的扩展名
5、限制上传文件的大小
6、生成新文件名(一般随机)
7、移动文件到指定目录并重命名为新生成的文件名

文件上传代码的简单封装

文件下载

原理

1、获取远程服务器文件的公开地址
2、通知浏览器以附件的形式加载远程服务器文件

实现

1、获取远程文件地址并清空缓冲区(ob_clean())
2、判断文件是否存在或者可读
3、以二进制可读的方式打开文件(rb)
4、通知浏览器以二进制流的形式加载文件(application/octet-stream)
5、通知浏览器文件大小
6、通知浏览器以附件的形式加载文件
7、输出文件内容
8、关闭文件流

文件下载代码的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值