PHP文件下载实例代码浅析


Posted in PHP onAugust 17, 2016

文件下载的功能对一个网站而言基本上是必备的了,今天就来看看PHP是如何实现文件下载的吧。

无控制类型

这里说的无控制类型是指 没有添加PHP代码控制的资源可以被直接下载的那些类型。一般而言,压缩文件.rar; 音视频文件:..avi等等也可以被直接下载。但是音频和mp4则会直接被浏览器解析播放。
如下图:

.avi文件

PHP文件下载实例代码浅析

.rar文件

PHP文件下载实例代码浅析

.mp4,MP3,图片等会被直接解析

PHP文件下载实例代码浅析

核心代码

使用php代码控制文件的下载合适很简单的。我们住需要很少的代码便可以完成如此复杂的工作。

类型

// 使用basename函数可以获得文件的名称而不是路径信息,保护了服务器的目录安全性
header("content-disposition:attachment;filename=".basename($filename));

长度

header("content-length:".filesize($filename));

实现函数

<?php

$filename = $_GET['filename'];
// 使用basename函数可以获得文件的名称而不是路径信息,保护了服务器的目录安全性
header("content-disposition:attachment;filename="$filename);
header("content-length:".filesize($filename));
readfile($filename);


?>

优化

上面指定文件名称的时候我们没有使用一个叫basename的函数,这样我们下载文件的时候将会连带着其在服务器上的文件的完整的路径。

注意: 下载文件的名称一定不能包含其在服务器上的完整路径名称,否则有可能会导致部分资源的泄露。即使有办法能控制访问资源的权限,但是使用basename函数也是很好的。 

原始下载文件的名称

PHP文件下载实例代码浅析

优化后的文件下载名称

PHP文件下载实例代码浅析

总结

php文件下载使用起来相较于Java实现真的是太方便了呢。在下载文件的内部,有许多的信息提供给我们,通过这些封装好的信息,我们可以实现更加优雅的文件下载系统。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP学习 运算符与运算符优先级
Jun 15 PHP
php设计模式 Interpreter(解释器模式)
Jun 26 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
Jan 26 PHP
分享一个php 的异常处理程序
Jun 22 PHP
CodeIgniter模板引擎使用实例
Jul 15 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 PHP
PHP快速生成各种信息提示框的方法
Feb 03 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 PHP
PHP实现关键字搜索后描红功能示例
Jul 03 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 PHP
php实现文件上传基本验证
Mar 04 PHP
PHP Ajax实现无刷新附件上传
Aug 17 #PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 #PHP
全面解析PHP验证码的实现原理 附php验证码小案例
Aug 17 #PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 #PHP
总结PHP中数值计算的注意事项
Aug 14 #PHP
示例详解Laravel的注册重构
Aug 14 #PHP
PHP实现路由映射到指定控制器
Aug 13 #PHP
You might like
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
javascript Window及document对象详细整理
2011/01/12 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
一个简易的js图片轮播效果
2017/07/22 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
python实现马耳可夫链算法实例分析
2015/05/20 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
Linux常见面试题
2013/03/18 面试题
淘宝客服专员岗位职责
2014/04/11 职场文书
新员工考核评语
2014/12/31 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
《称赞》教学反思
2016/02/17 职场文书