当前课程知识点:PHP程序设计 > PHP文件和图像技术 > 文件的上传和下载 > 文件下载
文件的下载比较简单
需要注意的是
文件下载的时候
需要在http消息里面设置两个响应消息头
那么这两个响应消息头是干什么呢
就是告诉它说
这个页面里面有一个要下载的文件
那么你不要在浏览器里面去解析这个文件吗
你是要直接把它下载下来的
对吧直接把它下载下来的
比如说我们响应小镜头这个header
我们要写这样一个
那么这个是一个文件的描述
对吧文件描述
后面的filename就是我们下载之后的文件名
应该写成什么样的
因为时间的关系
我们的下载咱们就直接来看一下代码对吧
补充上几句重要的东西
我把它已经放进来了
那么文件下载这个地方定义了一个函数
为什么要定义函数呢
其实是方便各位同学去用的
因为咱们下载往往是在我们的一个页面里面
可能只是一个链接或者是在页面的最底下
有那么一个供下载的一些资料
那么如果有这个页面里面有这个需求的话
那你可以直接在这个地方
function这个地方
去直接调用这个函数就可以了对吧
那么我们的下载定义函数
首先我们这还定义个什么
常量对不对
定义一个常量
我们的常量是什么呢
目录文件的名字
对吧是目录文件名字注意
因为我这个字体格式的原因
它没出来
其实这个是下划线下划线然后大写的FILE
然后再上划线下划线
是这么个东西
是咱们刚一开始学到的一个常量
那么我们的这个里面会有什么呢
这块我们function首先是判断这个文件
存在不存在
但是我们有一个问题
就是我这一块要加一句注释
就是我们现在对有可能会出现什么
可能会出现
中文名
比如说
我现在刚才我传进去的up里面
是个123对不对
但我桌面上其他文件是不是都是中文名的
那么中文名文件怎么办呢
如果你中文名文件不做处理的话
它传进去即便下载下来肯定是一堆乱码
所以我们要对可能出现的中文名
进行一个转码
这个转码的函数
其实同学们都见过
我们$file对吧
$file_path
等于我们就这个函数iconv对没错
变蓝了就对了
对吧就是这个
这个我们是不是再上一章那个
图形图像处理那个地方见我
对吧对它要进行一个
然后这里面写的是什么呢
里面写的就是我们的utf-8
然后里面是gb2312
然后我们在写我们有可能的名字
file_path
现在写的暂时的路径
好的分号带起来
我们要加上这一句
把它进行一个转码
然后再去判断A存在存在
然后记得这现在不是都是路径吗
我们是不是刚才讲目录的时候说过
有一个函数可以直接获取文件名的
还记得吧
就是那个basename对不对
括号里面把我们的什么$file_path对吧
这个里面的文件名取出来
文件名取出来给它一个名字
就是$file_name对吧
获取文件名用的就是它
就是我们的那个basename
还有一个文件大小
文件大小怎么样
就是那个filesize
括号里面我们依旧是个$file_path对吧
分号带上
给它一个赋值
大小自然就是我们的$file_size
好的
那么获取文件名大小
然后是不是就是open
打开以只读的方式去打开这文件
然后我们在这个地方加了两个header
这两个header就是我刚才说的
这俩个header就是告诉浏览器说
不要在浏览器里面直接去解析文件
这个里面有一个对吧
这个里面有一个下载的东西
而且这个地方这句什么呢
它这个类型就是我们的文件
是以二进制流的形式去执行的
然后我们打开了文件之后
其实就做了一个从前往后读的操作对吧
你看fread的一个一个往后读
用自加的方式一块一块的往过读的文件
最后判断整个文件是否结束
关闭文件
最终我们调用我们的这个函数对吧
就是我们的downfile这样子的一个函数
那么downfile这样子的一个函数里面
我们把路径要加上
那么我们就是按步骤走
我们这个地方目前有的是谁
123.docx对吧
那我们就把123.docx下载下来
我把路径写好
路径写好
然后跑一下吧
看看
是啊
好的没有什么问题
我这个页面一跑这个地方就出来了
是不是我们的123.docx
你可以根据你的要求
比如说我现在就不要放在那个哪了
不要放在桌面了或者放桌面也可以对吧
我桌面里面有一个文件内容
我放在文件内容的文件夹下
选择文件夹点击保存好了
下载成功了
我们看看文件内容这个文件夹下
是不是有123.docx了
对吧
再打开一下
看到里面写的中文字都没有什么变化OK
这个就是下载
-PHP概述
-PHP概述--作业
-开发环境搭建
--开发环境搭建一
--开发环境搭建二
--集成环境的安装
-开发环境搭建--作业
-PHP语法入门
--语法入门一
--语法入门二
-PHP数据的输出
--数据输出
-PHP数据类型
--数据类型1
--数据类型2
--数据类型3
--数据类型4
--数据类型5
--数据类型6
-PHP常量和变量
--常量和变量1
--常量和变量2
--常量和变量3
--常量和变量4
--常量和变量5
--常量
-PHP常量和变量--作业
-PHP的运算符和表达式
--运算符和表达式1
--运算符和表达式2
--运算符和表达式3
-PHP语法基础--PHP的运算符和表达式
-条件判断语句
--条件判断语句1
--条件判断语句2
--条件判断语句3
--条件语句
-循环控制语句
--循环控制语句
--循环语句练习1
--循环语句练习2
-跳转语句和终止语句
--跳转和终止语句
-流程控制
-数组概述和分类
--数组概述和分类
--PHP数组分类
-数组创建、删除和修改
--数组创建
-数组遍历
--数组遍历1
--数组遍历2
--数组遍历3
--数组遍历4
--数组遍历5
--foreach
-数组相关函数
--数组相关函数1
--数组相关函数2
--数组相关函数3
--数组相关函数4
--数组相关函数5
--数组相关函数6
--数组函数的练习
-PHP数组--作业
-分页函数的应用
-函数的定义与调用
--函数定义与调用
-函数参数传递
--函数参数传递1
--函数参数传递2
-自定义函数总结和实验
-常用变量和数学函数
--变量和数学函数库
--数学函数实验
--数学函数
-日期和时间函数
--日期时间函数1
--时间日期函数2
--倒计时
-PHP函数--作业
-字符串概述
--字符串特点
--字符串处理方式
-常见的字符串函数
--常见字符串函数1
--输出函数1
--输出函数2
--输出函数3
--去除空白函数1
--去除空白函数2
--去除空白函数3
--其他字符串函数1
--其他字符串函数2
--字符串函数实验1
--字符串函数实验2
--字符串函数实验3
--字符串函数实验4
--字符串练习1
--字符串练习2
--字符串练习3
--字符串练习4
--字符串练习5
--字符串函数
-正则表达式
--正则表达式练习
--正则表达式
-字符串函数--作业
-文件概述和操作
--文件概述和操作1
--文件概述和操作2
-文件的上传和下载
--文件上传1
--文件上传2
--文件上传3
--文件下载
-图像基础
--图像基础1
--图像基础2
-图像基本操作
--图像基本操作1
--图像基本操作2
--图像基本操作3
--图像基本操作4
--图像基本操作5
--图像基本操作6
--表单与验证码的结合
--图像技术练习1
--图像技术练习2
--图像技术练习3
--缩略图
-PHP文件与图像技术-作业
-变色验证码
-会话表单
--会话表单概述1
--会话表单概述2
--会话表单概述3
--超全局变量1
--超全局变量2
--超全局变量3
--表单安全验证
--获取表单数据
-cookie概述
--COOKIE简介
--COOKIE
-session概述
--基本应用1
--基本应用2
-会话管理-作业
-会话管理
-MySQL和PHPMyadmin概述
--MySQL概述1
--MySQL概述2
-PHP访问MySQL
--连接服务器
--选择数据库
--浏览表内容1
--浏览表内容2
--使用mysqli扩展添加数据到数据库中
--使用mysqli扩展删除数据库中数据
--使用mysqli扩展修改数据库中数据
-MySQL扩展的使用
--添加数据页面1
--添加数据页面2
--删除页面1
--删除页面2
--删除页面3
--数据修改页面1
--数据修改页面2
--数据修改页面3